Visualforce页面添加CSP响应头后出现TrustedHTML赋值错误如何解决
问题根因
该报错是CSP(内容安全策略)的require-trusted-types-for 'script'指令触发的合规校验:
- 你配置的CSP要求所有DOM sink(比如
innerHTML、document.write等可直接注入HTML的属性/方法)的输入必须是可信类型TrustedHTML,不能直接传入普通字符串 - jQuery 3.6.0版本未适配Trusted Types API,内部所有DOM赋值操作都是直接传入普通字符串,不符合CSP规则
解决方案
- 方案1:调整CSP配置
你可以修改响应头的CSP字段,为jQuery操作增加可信类型白名单,参考配置如下:
临时排查可先配置Content-Security-Policy: trusted-types jquery; require-trusted-types-for 'script'; 其他原有配置...trusted-types *允许所有可信策略,确认报错消失后再收紧权限即可。如果你的CSP是在Salesforce后台的「CSP信任站点」全局配置的,需要同步在后台修改规则。 - 方案2:升级jQuery版本
jQuery从3.7.0版本开始已官方适配Trusted Types API,直接将页面引用的jQuery 3.6.0替换为3.7.0及以上的稳定版本,无需修改业务代码即可解决90%以上的同类报错。 - 方案3:适配层兼容(无法升级jQuery也无法调整CSP时使用)
在页面引入jQuery后、执行业务代码前,插入如下适配代码,手动将jQuery的DOM操作输入转换为TrustedHTML类型:if (window.trustedTypes?.createPolicy) { // 创建jQuery专属可信策略 const jqueryTTPolicy = window.trustedTypes.createPolicy('jquery', { createHTML: (input) => input }); // 重写jQuery核心DOM赋值方法,其他用到的方法(append/prepend/replaceWith等)可按相同逻辑扩展 const originalHtmlFn = $.fn.html; $.fn.html = function (content) { if (typeof content === 'string') { content = jqueryTTPolicy.createHTML(content); } return originalHtmlFn.call(this, content); }; }
内容的提问来源于stack exchange,提问作者Dinesh Jangir
相关产品推荐
相关产品推荐

