我正在为Google Spreadsheets构建一个Google Apps脚本加载项。
清单中,我明确要求以下范围:“ https://www.googleapis.com/auth/script.container.ui”,“ https://www.googleapis.com/auth/spreadsheets”
此外,我的Google Cloud项目中的“ OAuth同意屏幕”具有相同的范围,并且这些范围已经由Google验证。
但是,如果输入错误,我无法向用户提供反馈。我尝试了以下方法:
似乎没有任何作用,我总是在堆栈驱动程序日志中看到错误“需要授权才能执行该操作。
可行的方法是创建一个“错误表”并将所有输入错误记录到其中,或者将主表中的一个单元格变为“错误单元”并将所有输入错误记录到其中。从用户体验的角度来看,我认为这不是一个好的解决方案。
似乎此问题与authMode有关:https://developers.google.com/gsuite/add-ons/concepts/editor-auth-lifecycle#authorization_modes因为仅在“ FULL” authMode中才可以使用“访问用户界面”,而在onEdit()中则不是这种情况。
奇怪的是,其他加载项能够显示警报/弹出窗口。这是黑客吗?还是我需要更多的范围?还是我需要更改其他内容?
EDIT 08.10.2019:
@@ Jacques-Guzel Heron:例如:用户在单元格A1中输入一个日期,在单元格B1中输入另一个。在onEdit(e)触发器中,我想检查B1中的日期是否晚于A1中的日期,否则,我想提醒用户。上面列出的所有方法在发布应用程序时都会导致错误“需要授权才能执行该操作”。当应用未发布时,.toast()、. alert()和.msgBox()可以在我的测试环境中工作。奇怪的是,这些方法随后创建了DIV元素,而其他附件为其警报/对话框创建了IFRAME元素。因此,我认为他们使用另一种方法,并且与范围无关。另外,我在OAuth验证过程中查看了这些附加组件,并且范围在dev-tools中列出。他们没有使用任何特殊的“ ui-scope”,因此我怀疑此错误的原因与范围有关。
编辑09.10.2019:现在,我知道如何制作包含IFRAME元素的警报/对话框。为此,可以使用以下方法:
var htmlString, msg, htmlOutput; htmlString = '<p>my html string</p>'; msg = 'my message'; htmlOutput = HtmlService .createHtmlOutput(htmlString) .setSandboxMode(HtmlService.SandboxMode.IFRAME) .setHeight(140); SpreadsheetApp .getUi() .showModalDialog(htmlOutput, msg);
但是在onEdit(e)期间也无法调用此方法。
上面列出的所有方法都可以通过单击菜单项,也可以通过单击侧栏中的按钮来调用,但不能在onEdit(e)期间调用。
另外,我添加了其他加载项正在使用的所有范围,但徒劳无功。因此,我的假设再次得到证实,该问题与范围无关。
我有一些聪明的人设法找到了一个非正式的工作场所,请让我知道:)
我正在为Google Spreadsheets构建一个Google Apps脚本插件。在清单中,我明确要求以下范围:“ https://www.googleapis.com/auth/script.container.ui”,“ https:// ...
您对所有方法都正确。是的,这是authorization modes中记录的预期行为。