You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:27:01