“需要授权才能执行此操作”,以进行警报/弹出,电子表格的Google Apps脚本附件

问题描述 投票:2回答:1

我正在为Google Spreadsheets构建一个Google Apps脚本加载项。

清单中,我明确要求以下范围:“ https://www.googleapis.com/auth/script.container.ui”,“ https://www.googleapis.com/auth/spreadsheets

此外,我的Google Cloud项目中的“ OAuth同意屏幕”具有相同的范围,并且这些范围已经由Google验证。

但是,如果输入错误,我无法向用户提供反馈。我尝试了以下方法:

  • SpreadsheetApp.getActiveSpreadsheet()。show(htmlApp);
  • SpreadsheetApp.getActiveSpreadsheet()。toast(message);
  • SpreadsheetApp.getUi()。alert('输入错误。'];
  • SpreadsheetApp.getUi()。showSidebar(html);
  • Browser.msgBox('输入错误。'];

似乎没有任何作用,我总是在堆栈驱动程序日志中看到错误“需要授权才能执行该操作。

可行的方法是创建一个“错误表”并将所有输入错误记录到其中,或者将主表中的一个单元格变为“错误单元”并将所有输入错误记录到其中。从用户体验的角度来看,我认为这不是一个好的解决方案。

似乎此问题与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:// ...

google-apps-script google-apps-marketplace chrome-web-store google-apps-script-addon
1个回答
0
投票

您对所有方法都正确。是的,这是authorization modes中记录的预期行为。

© www.soinside.com 2019 - 2024. All rights reserved.