Apps Script HTML锚点链接部分生效、返回值类型报错问题
问题成因
该报错由Google Workspace插件平台的双重校验规则触发,具体原因如下:
- 域名白名单拦截:Workspace插件平台默认仅允许跳转到谷歌官方域名(如google.com、googleusercontent.com等)及插件配置中明确授权的第三方域名,你使用的非谷歌域名未被纳入白名单,触发平台的跳转校验拦截。
- 服务端返回值构建不规范:如果你的锚点点击触发了
google.script.run调用服务端函数,服务端返回的对象未调用对应Builder的build()方法,或是返回了平台不支持的自定义对象类型,也会触发该类型报错。
解决方法
按照以下步骤操作即可修复问题:
- 配置域名白名单
在插件根目录的appsscript.json清单文件中,新增需要跳转的第三方域名到urlFetchWhitelist字段,示例配置如下:{ "timeZone": "Asia/Shanghai", "dependencies": {}, "oauthScopes": ["https://www.googleapis.com/auth/script.container.ui"], "urlFetchWhitelist": ["https://你的目标域名.com/*"] } - 调整HTML锚点跳转逻辑
不要直接在<a>标签的href属性中填写第三方外链,改用window.open()方法触发跳转,同时添加安全属性避免平台拦截,示例代码如下:<a href="javascript:void(0)" onclick="window.open('https://你的目标域名.com')" target="_blank" rel="noopener noreferrer"> 跳转链接 </a> - 规范服务端返回值
检查所有被前端调用的Apps Script服务端函数,若使用了CardService、NavigationService等Builder类创建返回对象,必须在末尾调用.build()方法后再返回,示例如下:// 错误写法 function getTestCard() { return CardService.newCardBuilder() .setHeader(CardService.newCardHeader().setTitle('测试卡片')) } // 正确写法 function getTestCard() { return CardService.newCardBuilder() .setHeader(CardService.newCardHeader().setTitle('测试卡片')) .build() }
内容的提问来源于stack exchange,提问作者Viral Vathas
相关产品推荐
相关产品推荐

