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

使用Puppeteer的addScriptTag注入jQuery报TrustedScript错误如何解决

你遇到的This document requires 'TrustedScript' assignment报错,是目标站点开启了*可信类型(Trusted Types)*的内容安全防护机制,该机制会禁止所有未经过可信策略校验的动态脚本插入操作,因此Puppeteer原生的page.addScriptTag方法会被拦截。以下是两种可行的解决方案:

方案1:全局绕过CSP校验

启动Puppeteer时添加对应配置禁用安全校验,直接绕过可信类型拦截,适合不需要保留站点原有CSP的场景:

const browser = await puppeteer.launch({
  headless: "new",
  args: [
    "--disable-web-security",
    "--disable-features=IsolateOrigins,site-per-process,TrustedTypes"
  ]
});
const page = await browser.newPage();
// 开启CSP绕过配置
await page.setBypassCSP(true);

// 之后就可以正常使用addScriptTag注入jQuery
await page.addScriptTag({ url: "https://code.jquery.com/jquery-3.2.1.min.js" });

方案2:上下文内构造可信策略注入

如果需要保留站点原有CSP规则,可以在页面执行上下文内自定义可信策略完成注入,不会影响站点原有安全配置:

注入远程jQuery代码示例:

await page.evaluate(async () => {
  // 创建自定义可信策略
  const injectPolicy = window.trustedTypes?.createPolicy("injectPolicy", {
    createScriptURL: (url) => url
  });
  // 构造脚本标签
  const script = document.createElement("script");
  script.src = injectPolicy?.createScriptURL("https://code.jquery.com/jquery-3.2.1.min.js") || "https://code.jquery.com/jquery-3.2.1.min.js";
  // 等待脚本加载完成
  await new Promise((resolve, reject) => {
    script.onload = resolve;
    script.onerror = reject;
    document.head.appendChild(script);
  });
});

注入本地jQuery内容示例:

// jquery变量为你本地提前读取的jQuery文件内容
await page.evaluate(async (jqueryContent) => {
  const injectPolicy = window.trustedTypes?.createPolicy("injectPolicy", {
    createScript: (content) => content
  });
  const script = document.createElement("script");
  script.textContent = injectPolicy?.createScript(jqueryContent) || jqueryContent;
  document.head.appendChild(script);
}, jquery);

内容的提问来源于stack exchange,提问作者yarek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:54:03