无法在 'Installed for current user' 配置下测试附加组件(即 AuthMode.NONE)

Unable to test add-on under 'Installed for current user' config (i.e. AuthMode.NONE)

我正在尝试构建我的第一个编辑器插件,其中相同的代码库应该在文档、表格和幻灯片上工作。

我仍处于测试阶段,这就是我遇到障碍的地方。问题来了 -

根据 Installed versus enabled 的文档,如果 select 测试配置为 为当前用户安装 (但尚未启用) ,菜单 应该是可见的(这将在 AuthMode.NONE 下);但是,根据我的脚本,它向我抛出一个错误,指示 -

Google Apps Script: You do not have permission to perform that action.

...而且菜单也不可见。

注意:应该在浏览器控制台上查看此错误

这是代码库和清单文件 -

Code.gs

var fileUI = SpreadsheetApp.getActiveSpreadsheet() ? SpreadsheetApp.getUi() : (DocumentApp.getActiveDocument() ? DocumentApp.getUi() : (SlidesApp.getActivePresentation() ? SlidesApp.getUi() : false));

function onInstall(e) {
  onOpen(e);
}

function onOpen(e) {
  if (fileUI) {
    var menu = fileUI.createAddonMenu();
    if (e && e.authMode == ScriptApp.AuthMode.NONE) {
      menu.addItem('Please Login', 'login');
    } else {
      menu.addItem('Hurray', 'itWorks');
    }
    menu.addToUi();
  }
}

function login() {
  fileUI.alert('Please login to access this add-on');
}

function itWorks() {
  fileUI.alert('Hurray! It works');
}

appscript.json(清单文件)

{
  "timeZone": "Asia/Kolkata",
  "dependencies": {
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/documents.currentonly",
    "https://www.googleapis.com/auth/presentations.currentonly",
    "https://www.googleapis.com/auth/spreadsheets.currentonly"
  ],
  "exceptionLogging": "STACKDRIVER"
}

备注

我觉得我在这里缺少一些超级基本的东西。如果我跳过了涵盖此内容的文档的某些部分,我深表歉意。任何帮助,将不胜感激。谢谢。

编辑笔记:

  1. 添加了关于 oauthScopes 的第三条评论
  2. 澄清了菜单不可见的问题

当脚本文件被加载到内存中以执行任何函数(onOpen 或任何其他函数)时,所有全局变量都是 loaded/executed。您的问题源于试图在 AuthMode.None.

下获取 active(getActive*()) 文档

如果您可以到达 Ui 而无需到达 getActive(),那是可能的。但是您正在尝试访问其间的文档:

SpreadsheetApp .getActiveSpreadsheet() ? SpreadsheetApp.getUi().

粗体部分导致了问题。 SpreadsheetApp.getUi() 会很好。

您也可以尝试 try{...}...catch(e){}

参考文献:

  • Authorization modes - 访问文档:AuthMode 下否:“NONE” table

  • Related answer - 可能无效。