【发布时间】:2018-08-30 13:09:55
【问题描述】:
我有一个 Apps 脚本项目,我在其中使用一个库来控制多个电子表格(每个用户一个)。这让我可以为许多用户将所有代码保存在一个地方。
每个用户的电子表格都有一个可安装的触发器(编辑时),该触发器作为具有授权的单个用户运行并调用库中的函数。
我现在收到一个以前没有的错误:
"您没有权限调用 showModalDialog"
showModalDialog 确实在库中用于使用电子表格向用户发送警报。我使用的是showModalDialog 而不是ui.alert(),因为ui.alert() 会在用户5 分钟后没有响应时停止代码并抛出错误(比如他们离开电脑)。这以前有效,但最近停止工作。为什么??
我的脚本文件包括以下范围:
https://www.googleapis.com/auth/script.container.ui
https://www.googleapis.com/auth/script.external_request
https://www.googleapis.com/auth/script.send_mail
https://www.googleapis.com/auth/spreadsheets
这是用户绑定脚本中的代码:
function userEdited(e) {
Library.userEdited(e);
}
用户绑定脚本有一个可安装的触发器,该触发器通过“On edit”事件运行“userEdited”。
这是库脚本中的代码:
function userEdited(e){
alert("the dialogue works");
}
function alert(message){
var htmlOutput = HtmlService
.createHtmlOutput('<p>' + message + '</p>')
.setWidth(300)
.setHeight(message.length / 50 * 25 + 30);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, "HAL 9000");
}
【问题讨论】:
-
如果在用户授权脚本作用域之前访问库,初始化时会出错。在访问您的库之前,您必须检查
authMode参数。这样做是为了防止脚本在用户未启动该操作的情况下打开内容。 -
@Brian,我从来没有在访问库之前检查过 authMode ......你能给我一个例子来说明这是如何完成的吗?我在库中使用的任何其他方法(包括使用 MailApp)都没有收到身份验证错误
-
AuthModeenum 确定脚本的运行方式。库脚本作为全局变量加载,就像加载脚本时尝试访问的任何全局变量或类一样。因此,如果您有一个需要用户授权的方法,它将在初始化时失败。在大多数情况下,您需要确保库不会在没有用户操作的情况下尝试访问这些属性或方法。 -
好的,所以在查看了 Authmode 的文档之后,我更加困惑为什么 showModalDialogue 不起作用。根据文档,authmode 为 NONE 或 LIMITED 的唯一原因是脚本从一个简单的触发器执行。但我正在使用 onEdit 可安装触发器,它应该有完全授权来运行任何东西?我在可安装触发器的文档中发现的唯一限制是,无法从 onOpen 可安装触发器调用诸如 showModalDialogue 和侧边栏之类的提示。但这不是我正在使用的。
标签: google-apps-script google-sheets triggers permissions