Apps Script部署Web应用加载外部脚本(如jQuery)失败求助
Google Apps Script Web应用加载外部jQuery报TrustedHTML错误的解决方案
近期Google Apps Script的HtmlService安全策略更新,导致原本正常运行的Web应用在加载外部jQuery时触发TrustedHTML相关错误,这是IFRAME沙箱模式下新增的DOM操作安全限制所致,并非代码本身问题。
错误原因
当前HtmlService的IFRAME沙箱模式默认启用了Trusted Types强制模式,要求所有涉及HTML注入的操作(如innerHTML)必须使用经过信任的HTML内容。未适配该机制的外部脚本(如jQuery中部分原生DOM操作)会因直接使用innerHTML触发错误,进而导致脚本加载失败,出现$ is not defined的后续报错。
解决方案
方案1:配置CSP并注册Trusted Types策略
修改Code.gs中的doGet函数,添加内容安全策略(CSP)允许加载外部jQuery,并注册信任策略:
function doGet() { var template = HtmlService.createTemplateFromFile('index'); return template.evaluate() .setTitle('TEST') .addMetaTag('viewport', 'width=device-width, initial-scale=1') .setSandboxMode(HtmlService.SandboxMode.IFRAME) .setContentSecurityPolicy(` default-src 'self'; script-src 'self' https://ajax.googleapis.com; trusted-types jquery; require-trusted-types-for 'script'; `); }
在index.html中,加载jQuery后添加Trusted Types注册代码:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <script> // 注册允许jQuery使用的Trusted Types策略 if (window.trustedTypes && trustedTypes.createPolicy) { trustedTypes.createPolicy('jquery', { createHTML: (str) => str }); } </script>
方案2:内嵌jQuery脚本
将jQuery的压缩代码直接内嵌到index.html中,绕过外部加载的安全限制:
<script> // 粘贴jQuery 3.7.1的压缩代码(可从官方渠道获取) </script>
验证步骤
修改代码后,重新部署Web应用(选择“新版本”并确认权限设置),刷新页面后控制台应不再报错,jQuery功能可正常运行。
内容的提问来源于stack exchange,提问作者Waxim Corp
相关产品推荐
相关产品推荐

