Google Apps Script Gmail插件文本按钮跳转URL触发CSP错误咨询
问题原因与修复方案
1. 实现方案选型
方案1(直接调用setOpenLink)是仅需要跳转URL场景的标准正确实现,代码执行效率更高。方案2适合跳转前需要额外执行业务逻辑的场景,两种写法本身语法没有错误。
2. 报错根因
你遇到的Chrome专属报错由两个问题共同导致:
OpenLink对象缺少必填的显式配置参数,Chrome对谷歌应用生态的CSP校验比Firefox严格,未明确配置打开属性的跳转被识别为非法的javascript:导航触发拦截。appsscript.json中的openLinkUrlPrefixes前缀匹配规则不全,非匹配范围内的跳转都会被CSP拦截。
3. 修复步骤
步骤1:补全OpenLink配置参数
给OpenLink对象明确指定打开方式和关闭后的行为:
function getLink(link) { return CardService.newTextButton() .setText("Go to URL") .setOpenLink(CardService.newOpenLink() .setUrl(link) // 明确指定打开方式,可选FULL_SIZE(新标签页)/POPUP(弹窗) .setOpenAs(CardService.OpenAs.FULL_SIZE) // 明确指定跳转后关闭附加组件面板的行为,可选NOTHING/RELOAD_ADD_ON .setOnClose(CardService.OnClose.NOTHING)); }
步骤2:补全域名白名单前缀
修改appsscript.json中的openLinkUrlPrefixes配置,增加不带www的根域名前缀,覆盖所有该域名下的跳转链接:
"openLinkUrlPrefixes": [ "https://www.leprosy.com/", "https://leprosy.com/" ],
修改配置后需要重新部署附加组件生效,即可解决Chrome下的CSP拦截问题。
内容的提问来源于stack exchange,提问作者Leprosy
相关产品推荐
相关产品推荐

