脚本管理器在CSP严格策略页面不执行,因unsafeWindow被禁且注入被拦截;需检查响应头CSP字段、匹配规则完整性、站点隔离状态及企业策略,并通过@run-at document-idle和@grant none降级适配。

谷歌浏览器的脚本管理器(如 Tampermonkey、Violentmonkey)在某些特定页面完全不触发、不注入、不执行用户脚本,常见于银行登录页、政务平台、企业内网系统或启用 CSP 严格策略的现代 SPA 应用——这不是脚本写错了,而是浏览器主动拦截了注入行为。
确认脚本管理器是否被目标页面主动屏蔽
打开目标网页 → 按 F12 打开开发者工具 → 切换到 Console 面板 → 输入 typeof unsafeWindow 回车;若返回 "undefined",说明该页面通过 Content-Security-Policy: script-src 'self' 等头彻底禁止了第三方脚本上下文注入,Tampermonkey 默认无法挂载 unsafeWindow,多数依赖它的脚本会静默失效。
此时不要急着改脚本,先看 Network 选项卡中该页面响应头里是否含 Content-Security-Policy 字段,重点检查 script-src 和 worker-src 的值——若不含 'unsafe-eval' 或 'unsafe-inline',且未显式声明 https://*.tampermonkey.net,脚本管理器连初始化钩子都进不去。
检查脚本匹配规则是否被协议/端口/路径细节拦住
点击浏览器右上角 Tampermonkey 图标 → 选择「 Dashboard 」→ 找到对应脚本 → 点击「编辑」→ 查看 @match 或 @include 行。
【必须包含完整协议和精确路径】例如目标网址是 https://ebank.example.com/login?step=2,而脚本只写了 @match https://ebank.example.com/*,它能匹配;但若写成 @match ebank.example.com/*(缺 https://),则 Chrome 会直接忽略整条规则,脚本永不加载。
更隐蔽的坑:某些单页应用(如 Vue Router history 模式)URL 看似是 /dashboard,实际是前端路由,真实 HTML 始终从 /index.html 加载——此时必须用 @match https://site.com/* 或 @include https://site.com/*,不能只写 @match https://site.com/dashboard。
排查浏览器级权限与隔离策略干扰
方法一:验证当前页面是否处于「跨域隔离」或「站点隔离」强管控环境
在地址栏输入 chrome://site-engagement/ → 回车 → 在搜索框输入目标域名 → 查看「Isolation status」字段。若显示 Strict site isolation enabled 且「Cross-origin isolated」为 false,说明该页面被 Chrome 主动降权,Tampermonkey 注入的 iframe 或 worker 可能被拒绝创建。
方法二:检查是否启用了企业策略或管理员强制配置
在地址栏输入 chrome://policy → 回车 → 滚动查找 ExtensionSettings 或 ScriptingAllowlist 条目。若存在策略将 Tampermonkey ID(如 dhdgffkkebhmkfjojejmpbldmpobfkfo)设为 blocked,脚本管理器会在后台被禁用,图标变灰且无任何提示。
【关键提示:这类策略由组策略或 MDM 推送,普通用户无法在 chrome://extensions 页面手动开启】
绕过 CSP 限制的实操步骤(仅限可信站点)
第一步:确认脚本管理器版本 ≥ 4.19(Violentmonkey ≥ 2.14.0),旧版不支持 @run-at document-idle 和 grant none 安全降级模式。
第二步:编辑问题脚本 → 在元数据块顶部添加两行:
// @run-at document-idle
// @grant none
第三步:删除所有含 unsafeWindow、GM_xmlhttpRequest、GM_setValue 的调用,改用原生 window、fetch、localStorage —— 这样脚本不再需要突破 CSP,仅作为普通内联脚本运行。
第四步:保存后刷新页面 → 打开开发者工具 → Application → Service Workers → 点击「Skip waiting」并勾选「Update on reload」→ 强制重载页面,避免旧缓存 Service Worker 劫持请求。



















