摘要:是否可以请求授权onOpen()?
详细版本: 我有一个带有按钮的电子表格,可以分发给很多人。 当按下任何按钮时,会调用一些需要权限的功能,因此Google Apps脚本会显示此弹出窗口:
在接受此项后,一切运行良好,因为它现在已获得授权。但是,我希望在打开工作簿时按下按钮之前运行需要权限的内容。但是,如果将需要授权的代码放入onEdit或onOpen函数,则默认情况下它运行时没有任何权限,并且会中途崩溃,而不是显示弹出窗口并要求权限。
以下是一些代码示例:崩溃而不是要求创建触发器的权限(也适用于CalendarApp等):
function onOpen(e) {
Browser.msgBox("This is shown to the user");
try {
ScriptApp.newTrigger('someFunction').forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onEdit().create();
}
catch (e) {
Browser.msgBox(e);
}
Browser.msgBox("This message is never shown to the user if there is no try catch because it crashes");
}
答案 0 :(得分:4)
注意:简单的触发器无法访问需要授权的服务。例如,简单的触发器无法发送电子邮件,因为Gmail服务需要授权
onOpen()
是函数的保留函数名,是一个简单的触发器。
有一种方法可以检查授权状态,然后在需要授权代码时获取授权URL。但是,如果ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL)
方法需要用户授权,那么从onOpen()
function onOpen() {
// EDIT: (TODO: Here it may be nice to check ScriptApp.AuthMode or equivalent
// to see if it already acquired permissions so the sidebar
// does not popup every time the SpreadSheet is opened)
showSidebar();
}
function showSidebar() {
var html = HtmlService.createTemplateFromFile('HTML_Sidebar').evaluate()
.setTitle('Log Tools')
.setWidth(300);
SpreadsheetApp.getUi()
.showSidebar(html);
}
<!DOCTYPE html>
<html>
<head>
<base target="_blank">
</head>
<body>
<div><?!= getAuthUrl(); ?></div>
</body>
</html>
function getAuthUrl() {
var authInfo,msg;
authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL);
msg = 'This spreadsheet needs permission to use Apps Script Services. Click ' +
'this url to authorize: <br><br>' +
'<a href="' + authInfo.getAuthorizationUrl() +
'">Link to Authorization Dialog</a>' +
'<br><br> This spreadsheet needs to either ' +
'be authorized or re-authorized.';
//return msg;//Use this for testing
//ScriptApp.AuthMode.FULL is the auth mode to check for since no other authorization mode requires
//that users grant authorization
if (authInfo.getAuthorizationStatus() === ScriptApp.AuthorizationStatus.REQUIRED) {
return msg;
} else {
return "No Authorization needed";
}
}
答案 1 :(得分:1)
如今,由于Google进行了一些政策更改(现在阻止该脚本通过使用诸如onOpen
的简单触发器来自动打开UI元素),因此并非总是可以强制在onOpen上强制要求授权。
电子表格的所有者可以这样做,但编辑者不能。
从my answer(将近一岁,到目前为止已获得0票)到onOpen not executing?
简单的触发器打开功能无法打开侧边栏,因为它在 AuthMode.LIMITED。您应该使用运行在 Auth.Mode.FULL打开侧边栏,例如可安装的触发器。
我知道这与附加组件无关,但以下引用适用
来自 https://developers.google.com/apps-script/add-ons/lifecycle#authorization_modes
注意:在AuthMode.LIMITED中执行时,加载项无法打开边栏或对话框。您可以使用菜单项打开侧边栏和对话框 因为它们在AuthMode.FULL中运行。
规范参考