Debugging “如何复制”;您没有执行该操作的权限”;在仅创建菜单的onOpen上
Tl;我和我的搭档Dr My partner发布了一个Google Sheets附加组件,它在打开电子表格时“随机”抛出“您无权执行该操作”。Debugging “如何复制”;您没有执行该操作的权限”;在仅创建菜单的onOpen上,debugging,google-apps-script,google-apps-script-addon,triggers,Debugging,Google Apps Script,Google Apps Script Addon,Triggers,Tl;我和我的搭档Dr My partner发布了一个Google Sheets附加组件,它在打开电子表格时“随机”抛出“您无权执行该操作”。onOpen功能不需要授权即可执行 有没有办法重现/调试此错误 以下是“最小完整和可验证的示例”,只是到目前为止我无法重现错误。这是一个简单的onOpen函数,它唯一要做的就是创建一个包含两个选项的菜单 文件Addon.gs function onOpen(e) { SpreadsheetApp.getUi().createAddonMenu()
onOpen
功能不需要授权即可执行
有没有办法重现/调试此错误
以下是“最小完整和可验证的示例”,只是到目前为止我无法重现错误。这是一个简单的onOpen函数,它唯一要做的就是创建一个包含两个选项的菜单 文件Addon.gs
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu()
.addItem('Menu item 1', 'doSomething1')
.addItem('Menu item 2', 'doSomething2')
.addToUi()
}
function doSomething1(){
SpreadsheetApp.getUi().alert('Something 1');
}
function doSomething2(){
SpreadsheetApp.getUi().alert('Something 2');
}
昨天,Stackdriver日志显示以下错误
您没有执行该操作的权限。请请求此项目的所有者授予您访问权限。在onOpen(插件:109)
其中第109行是.addToUi()
同样的错误也发生在以前版本的附加组件上
这些版本(14、18、20)的onOpen
功能没有任何变化
我创建了一个电子表格,与其他帐户共享,这些帐户没有安装具有编辑器访问权限和查看器访问权限的附加组件,但没有发生错误
关于附加组件的其他详细信息,我认为我没有包括在“mcve”中
这个附加组件已经完成了
- 几个文件,包括
和.gs
.html
- 使用一个著名的图书馆(Bruce McPherson提供的Cusile)
- 使用高级服务(管理员目录和谷歌教室)
- json文件是定制的,所需的oAuth作用域与oAuth同意页面和G套件市场设置页面上设置的作用域匹配
- 在全局范围上有
语句,用于分配文本(其中大多数将工作表名称分配给变量,将数字分配给变量)和名称空间,以便稍后从侧边栏的客户端代码调用var
onOpen
函数的问题
我认为这个问题与多帐户登录错误无关,因为它发生在使用google.script.run
从客户端代码调用需要授权的函数时,但在这种情况下,错误发生在电子表格加载项添加addToUi()时
不需要授权即可执行的方法
我对前面的代码做了一个小的修改来记录openevent对象
function onOpen(e) {
console.info(e);
SpreadsheetApp.getUi().createAddonMenu()
.addItem('Menu item 1', 'doSomething1')
.addItem('Menu item 2', 'doSomething2')
.addToUi()
}
function doSomething1(){
SpreadsheetApp.getUi().alert('Something 1');
}
function doSomething2(){
SpreadsheetApp.getUi().alert('Something 2');
}
然后我创建了一个新的电子表格,用它作为附加组件进行测试,设置为enabled(AuthMode=LIMITED),然后我与任何可以编辑链接的人共享电子表格,并在incognito中使用Chrome打开电子表格,但菜单未显示,脚本执行页面中也没有日志条目
为了能够使用Stackdriver日志记录,我将默认项目替换为Google云标准项目。这是匿名用户访问电子表格时记录的内容
很抱歉,从存储读取时发生服务器错误。错误代码权限被拒绝
由于上述错误,我创建了一个显示一些“未定义”消息的有界脚本。每个消息都对应于Type=Editor的脚本执行页面上的一个项目。奇怪的是我没有从编辑那里运行脚本
如果您希望通过自动记录打开的打开事件来提供帮助
用于在启用模式下以加载项的形式运行
用于作为绑定脚本运行(不同的脚本项目,相同的Google云项目)
关于onOpen触发器未被匿名用户打开,存在一个问题和一个标记为已修复的相关问题,但显然问题再次出现 相关问题:
相关问题
我又试了一次
到目前为止,我似乎应该做“完整的enchilada”(作为附加组件发布)来重现错误。我已经阅读了对话并进行了一些调查,我认为您应该就附加组件授权问题联系我们。但是,
匿名用户无法执行运行触发器问题,因为这是一种预期行为。最近有人要求实现这一点。让我们来看看。实际上,他们能够在ES5中运行触发器。但他们不能添加菜单项或使用ui做任何事情。谢谢你。G套件支持不回答有关谷歌应用程序脚本的问题我在过去已经问过他们了
function onOpen(e) {
var locale = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetLocale();
var menu = SpreadsheetApp.getUi().createAddonMenu();
if( locale !== 'en_US' ){
menu.addItem( 'Change to en_US', 'changeToUS' )
} else {
menu.addItem( 'Change to es_ES', 'changeToES' )
}
menu.addToUi();
}
function changeToUS(){
console.info( 'Changing to en_US' );
SpreadsheetApp.getActiveSpreadsheet().setSpreadsheetLocale( 'en_US' );
console.info( 'Changed to en_US' );
}
function changeToES(){
console.info( 'Changing to es_ES' );
SpreadsheetApp.getActiveSpreadsheet().setSpreadsheetLocale( 'es_ES' );
console.info( 'Changed to es_ES' );
}