Google Sheets插件发布被拒:安装后菜单选项未显示问题排查
问题原因
- 核心错误1:顶层全局变量触发权限报错。你在脚本最外层声明了
var userProperties = PropertiesService.getUserProperties();,该语句会在所有函数执行前优先加载,当插件首次打开文件处于AuthMode.NONE授权模式时,没有权限访问Properties服务,会直接抛出脚本运行错误,导致后续菜单渲染逻辑完全中断,审核人员无法看到菜单选项。 - 核心错误2:菜单渲染的判断逻辑不符合规范。现有逻辑判断
e && e.authMode != ScriptApp.AuthMode.NONE时才渲染菜单,但按照编辑器插件授权生命周期规则,AuthMode.NONE模式下本身就支持渲染基础插件菜单,你直接屏蔽了该场景下的菜单渲染,导致用户打开未授权文件时看不到插件入口。 - 细节问题:菜单项
History末尾带有多余空格,属于交互细节不规范,可能影响审核判定。
修复方案
1. 调整Code.gs代码
将需要授权的服务调用移出顶层作用域,同时调整菜单渲染的判断逻辑,修改后完整代码如下:
function onInstall(e) { onOpen(e); } function onOpen(e) { const ui = SpreadsheetApp.getUi(); // 所有授权模式下优先渲染基础菜单,捕获异常避免脚本中断 try { ui.createAddonMenu() .addItem('Enable/Disable', 'showSidebar') .addSeparator() .addItem('History', 'openHistoryDialog') .addSeparator() .addItem('Buy credits', 'addCredits') .addSeparator() .addItem('Settings', 'settingsDialog') .addToUi(); } catch (err) { console.log('Menu render failed:', err); } // 仅在非NONE授权模式下,执行需要权限的属性配置操作 if (e && e.authMode !== ScriptApp.AuthMode.NONE) { const userProperties = PropertiesService.getUserProperties(); // 仅当配置不存在时设置默认值,避免每次打开文件覆盖用户已保存的设置 if (!userProperties.getProperty("enable_user")) { userProperties.setProperty("enable_user", false); } } }
代码改动说明:
- 删除顶层作用域的
userProperties声明,避免脚本加载阶段提前调用受限服务触发报错 - 菜单渲染逻辑不受授权模式判断限制,保证
AuthMode.NONE场景下也能正常显示菜单 - 将Properties服务相关操作移入非NONE授权的判断分支,符合插件权限规则
- 优化默认配置写入逻辑,不会每次打开文件都重置用户的开关状态
- 移除
History菜单项末尾的多余空格
2. 配置文件校验
你当前的appscript.json配置中已经包含了菜单渲染必需的https://www.googleapis.com/auth/script.container.ui权限,其余oauthScopes配置也符合要求,无需额外修改。
提交审核前请先验证两个核心场景:1)全新安装插件后菜单是否立即显示;2)重启表格打开任意未授权的表格文件,检查插件菜单是否正常加载,两个场景均正常即可重新提交审核。
内容的提问来源于stack exchange,提问作者Umar Tanveer
相关产品推荐
相关产品推荐

