警报/弹出窗口"Authorisation is required to perform that action",电子表格的Google Apps脚本插件



我正在为 Google 电子表格构建一个 Google Apps Script 插件。

在清单中,我明确请求了以下范围: "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('Wrong input.'(;
  • SpreadsheetApp.getUi((.showSidebar(html(;
  • Browser.msgBox('错误的输入'(;

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

有效的方法是创建一个"错误表"并将所有输入错误记录到其中,或者将主工作表中的一个单元格记录到"错误单元"中并将所有输入错误记录到其中。我认为就用户体验而言,这不是一个好的解决方案。

这个问题似乎与身份验证模式有关:https://developers.google.com/gsuite/add-ons/concepts/editor-auth-lifecycle#authorization_modes 因为"访问用户界面"只能在"FULL"authMode中实现,而在onEdit((期间并非如此。

奇怪的是,其他附加组件能够显示警报/弹出窗口。这是黑客吗?还是需要更多示波器?还是我必须改变其他什么?

编辑08.10.2019:

@Jacques-古泽尔苍鹭: 例如:用户在单元格 A1 中输入一个日期,在单元格 B1 中输入另一个日期。在 onEdit(e( 触发器中,我想检查 B1 中的日期是否在 A1 中的日期之后,如果不是,我想提醒用户。发布应用时,上面列出的所有方法都会导致错误"需要授权才能执行此操作"。当应用程序未发布 .toast(( 时,.alert(( 和 .msgBox(( 在我的测试环境中工作。奇怪的是,这些方法随后创建一个 DIV 元素,而其他附加组件为其警报/对话框创建一个 IFRAME 元素。因此,我认为他们使用另一种方法,与范围无关。此外,我在OAuth验证过程中查看了这些附加组件,并且范围列在开发工具中。他们不使用任何特殊的"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(期间调用。

此外,我还添加了其他附加组件正在使用的所有范围,但徒劳无功。因此,我的假设再次得到证实,该问题与范围无关。

我的印象是,一些聪明人设法找到了一个非正式的工作,请告诉我:)

你所有的方法都是对的。是的,这是授权模式下记录的预期行为。

这些加载项使用自定义菜单来使用公式,该公式在调用按下按钮后检查单元格。

在该文档中,可以找到用于开发警报的信息。请描述您要完成的任务,以便我更好地帮助您,否则请毫不犹豫地要求我进行更多澄清。

解决方案是可安装的触发器:https://developers.google.com/apps-script/guides/triggers/installable

它们在完全身份验证模式下运行,因此允许访问用户界面:https://developers.google.com/gsuite/add-ons/concepts/editor-auth-lifecycle#authorization_modes

最新更新