Debugging “如何复制”;您没有执行该操作的权限”;在仅创建菜单的onOpen上

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()

Tl;我和我的搭档Dr My partner发布了一个Google Sheets附加组件,它在打开电子表格时“随机”抛出“您无权执行该操作”。
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
    语句,用于分配文本(其中大多数将工作表名称分配给变量,将数字分配给变量)和名称空间,以便稍后从侧边栏的客户端代码调用
我发现Stack Overflow有几个关于“您无权执行该操作”错误消息的问题,但没有一个是关于没有需要授权才能执行的语句的
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触发器未被匿名用户打开,存在一个问题和一个标记为已修复的相关问题,但显然问题再次出现

相关问题:
相关问题


我又试了一次

  • 我对代码做了一些修改,包括在open上读取区域设置,并使用此值来创建动态菜单
  • 禁用由Chrome V8支持的新应用程序脚本运行时
  • 与具有链接的任何人共享电子表格
  • 使用另一个已登录多个帐户的帐户打开电子表格。此帐户是默认帐户

    以下屏幕显示有一个匿名用户正在查看电子表格

  • 使用其他帐户,单击加载项>脚本项目名称>更改为en_US。这在用户屏幕上显示了难以捉摸的错误消息
  • 但是脚本执行页面中没有显示错误
  • 因此,我添加了一个谷歌云标准项目,刷新了使用另一个帐户的电子表格,但现在没有显示错误,而是显示了告诉代码不安全的警告,我继续授权脚本。然后我再次点击菜单,这次脚本被执行了

  • 然后,我删除了脚本授权,使用第二个帐户打开spreasheet,没有错误,但是在由于位置更改而刷新选项卡后,电子表格是使用默认帐户打开的,而不是使用用于单击菜单的帐户



  • 到目前为止,我似乎应该做“完整的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' );
    }