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

Service Worker注册失败:脚本URL协议不支持(Tampermonkey场景)

Tampermonkey脚本注册Service Worker报错解决

问题本质

浏览器的Service Worker安全规则明确要求:注册的脚本必须使用http/https协议,且与当前页面同源(或通过服务器配置Service-Worker-Allowed响应头放宽范围)。blob:、data:这类协议不在允许范围内,所以无论你怎么转换这两种URL,都会触发「脚本URL协议不支持」的错误。

可行解决办法

1. 托管脚本到目标页面同源地址

如果有权限操作目标网站的服务器,直接把Service Worker脚本放到目标域名下的路径(比如/sw.js),然后在Tampermonkey脚本里直接注册:

(async () => {
  try {
    const reg = await navigator.serviceWorker.register('/sw.js');
    console.log('Service Worker注册成功:', reg);
  } catch (err) {
    console.error('Service Worker注册失败:', err);
  }
})();

2. 配置服务器允许跨源注册(需服务器权限)

若脚本托管在外部域名(如GitHub Pages),需要在托管服务器的响应头中添加Service-Worker-Allowed: 目标页面域名,然后注册时指定scope参数:

(async () => {
  try {
    const reg = await navigator.serviceWorker.register('https://你的外部托管地址/sw.js', {
      scope: 'https://www.javascripttutorial.net/'
    });
    console.log('Service Worker注册成功:', reg);
  } catch (err) {
    console.error('Service Worker注册失败:', err);
  }
})();

注意:普通GitHub仓库的raw文件无法自定义响应头,此方法仅适用于支持配置响应头的托管平台(如Netlify、Vercel等)。

3. 关于你之前尝试的方法

你用GM_getResourceURL生成blob/data URL的方式,本质上不符合浏览器的Service Worker规则,所以必然报错,无需再尝试这种路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:05:54