已发布Google Sheets插件调用showSidebar报错权限问题求助
问题背景
我们发布的Google Sheets插件已通过Google OAuth与Workspace团队审核,触发菜单项时会调用REST API获取数据,API返回200 OK后启动侧边栏。开发阶段功能正常,但正式发布后出现权限报错,且不同环境表现不一致:
Exception: You do not have access to perform that action. Please ask the owner of this item to grant access to you.
报错触发在ss.showSidebar(html);代码行,测试部署(仅当前用户安装、当前文档启用)无异常,环境差异如下:
- Windows/Chrome:正常运行
- MacOS Catalina/Chrome:正常运行
- MacOS Monterey M1/Chrome:无法运行
- MacOS Monterey M1/Safari:可运行,但每次调用脚本会打开新标签页
解决建议
1. 核对插件OAuth权限配置
正式发布的插件权限范围可能与测试部署存在差异:
- 确认已添加
https://www.googleapis.com/auth/spreadsheets(对应文档类型的权限),且权限设置为授权域内所有用户而非仅测试用户 - 若为Workspace插件,需联系域管理员确认已在域内启用该插件的权限
2. 重构侧边栏触发逻辑
避免在API回调中直接调用showSidebar,改用状态存储+主动检查的方式:
// API调用成功后存储状态 function fetchDataAndSetStatus() { const response = UrlFetchApp.fetch('YOUR_API_URL'); if (response.getResponseCode() === 200) { PropertiesService.getUserProperties().setProperty('apiReady', 'true'); checkAndOpenSidebar(); } } // 检查状态并打开侧边栏 function checkAndOpenSidebar() { const isReady = PropertiesService.getUserProperties().getProperty('apiReady'); if (isReady === 'true') { const html = HtmlService.createTemplateFromFile('dashboard').evaluate() .setTitle("Dashboard"); // 移除显式的IFRAME沙箱设置,使用默认兼容模式 SpreadsheetApp.getUi().showSidebar(html); PropertiesService.getUserProperties().deleteProperty('apiReady'); } }
3. 修复M1 Chrome兼容性问题
Mac Monterey M1的Chrome可能存在iframe沙箱兼容性问题:
- 移除
setSandboxMode(HtmlService.SandboxMode.IFRAME),Google Apps Script当前默认使用更兼容的沙箱模式,无需显式指定 - 将Chrome升级至最新稳定版,清除浏览器缓存、Cookie后重新授权插件
4. 解决Safari新标签异常
Safari对弹出行为的限制更严格:
- 检查
dashboard.html中的前端代码,确保所有后端调用使用google.script.run而非跨域请求,避免触发授权跳转 - 在插件OAuth配置中,确认已将Safari相关域名加入授权白名单
5. 排查发布配置差异
对比测试部署与正式发布的配置细节:
- 确认正式发布时已正确勾选需要用户授权选项,且授权流程完整
- 核对部署版本与测试版本的代码一致性,排除遗漏的变更
内容的提问来源于stack exchange,提问作者Indark
相关产品推荐
相关产品推荐

