Gmail Addon的setOnClickOpenLinkAction无法打开白名单外部链接如何解决
问题修复方案
根因说明
该报错是Google Workspace插件前端渲染层的兼容性问题导致:Chrome、Safari对Content Security Policy的校验规则比Firefox更严格,通过setOnClickOpenLinkAction动态返回跳转链接时,前端生成的执行脚本未被纳入CSP白名单就会触发拦截,并非你的基础配置逻辑错误。
修复步骤
- 第一步:确认
openLink函数是全局可访问的,如果你用了模块化打包工具,不要加export关键字,或配置打包规则将该函数挂载到全局作用域。Apps Script的动作回调函数必须是全局函数,否则会触发执行失败,连带出现CSP报错。 - 第二步:补全
setOpenLink的必填参数,不要仅设置url,完整写法参考如下:
// 去掉export关键字,改为全局函数 function openLink(event): ActionResponse { const url = buildUrl(event.parameters); return CardService.newActionResponseBuilder() .setOpenLink( CardService.newOpenLink() .setUrl(url) // 可根据需求选FULL_SIZE/POPUP等打开方式 .setOpenAs(CardService.OpenAs.POPUP) // 可根据需求选NOTHING/RELOAD_ADD_ON等关闭后的行为 .setOnClose(CardService.OnClose.NOTHING) ) .build(); }
- 第三步:核对Manifest配置的
openLinkUrlPrefixes前缀和动态生成的url完全匹配,注意末尾斜杠不能有差异:
例如配置的前缀是"https://sub.fulldomain.com/",生成的url必须是该前缀开头,不能出现http、其他子域名的情况。通配符前缀"https://*.fulldomain.com/"仅对正式发布的插件生效,本地测试环境不支持通配符匹配。 - 第四步:如果是本地测试阶段出现该问题,可以将插件发布到内部测试域安装后再验证,本地测试的Apps Script插件运行环境CSP规则和正式发布环境不一致,常出现误拦截的情况。
如果以上步骤都操作完成后仍未解决,可提交工单给Google Workspace支持团队,该问题是2024年已知的待修复前端bug,部分区域的服务节点已经推送了修复补丁。
内容的提问来源于stack exchange,提问作者Neara
相关产品推荐
相关产品推荐

