注册 ServiceWorker 返回 AbortError code:20
Posted
技术标签:
【中文标题】注册 ServiceWorker 返回 AbortError code:20【英文标题】:Registering ServiceWorker returns AbortError code:20 【发布时间】:2014-11-23 08:30:31 【问题描述】:我已经开始在 Google Chrome v38 中使用 ServiceWorker
。我已将about:config
中的#enable-experimental-web-platform-features
设置为True
,并设置我的本地主机以通过https://
处理请求。
我的sw.js
文件包含简单示例:
// The SW will be shutdown when not in use to save memory,
// be aware that any global state is likely to disappear
console.log("SW startup");
self.addEventListener('install', function(event)
console.log("SW installed");
);
self.addEventListener('activate', function(event)
console.log("SW activated");
);
self.addEventListener('fetch', function(event)
console.log("Caught a fetch!");
event.respondWith(new Response("Hello world!"));
);
还有我的app.js
文件:
if ('serviceWorker' in navigator)
console.log('registering sw.js');
navigator.serviceWorker.register('/static/js/sw.js').then(function(reg)
console.log('Yey!', reg);
, function(err)
console.log('Boo!', err);
);
我的控制台输出是:
registering sw.js app.js:27
Boo!
DOMException: The Service Worker installation failed. message: "The Service Worker installation failed.", name: "AbortError", code: 20, INDEX_SIZE_ERR: 1, DOMSTRING_SIZE_ERR: 2… app.js:31
有解决此问题的方法吗?
【问题讨论】:
【参考方案1】:使用 Service Worker 进行开发时,请使用 Google Chrome 40 或更高版本(无需 chrome://flags
摆弄)。 Chrome 38 可能已经对一些 Service Worker API 提供了一些非常非常初步的支持,但是自 Chrome 38 以来,API 的规范和成熟度都发生了显着变化。Chrome 39 也是如此。
理想情况下,出于开发目的,我实际上建议使用当前的Google Chrome Canary (41),因为自 Chrome 40 分支切割以来,错误消息已经有了一些增强,更准确/表达性更强的错误有很大帮助在弄清楚出了什么问题时。
【讨论】:
我使用的是金丝雀 (41),没有修改标志,无法使其在本地工作 (http)。 服务工作者通常只会为通过https
服务的页面工作。但是,当与localhost
对抗时,有一项豁免将允许http
访问。如果您在本地测试 Service Worker,请确保您通过 http://localhost:<port>
URL 访问受控页面。【参考方案2】:
我收到了一个带有语法错误的 ServiceWorker 的错误。由于 Chrome 甚至没有在 Network 选项卡中记录 service worker 获取,因此需要一段时间才意识到这是原因。
对于遇到此错误的其他人,请尝试使用空 sw.js 的隐身标签。
【讨论】:
【参考方案3】:此外,Service Workers 的语法错误报告和 Chrome DevTools 支持总体上仍在开发中。在我写这篇文章时,Chrome 42 处于测试阶段。
【讨论】:
以上是关于注册 ServiceWorker 返回 AbortError code:20的主要内容,如果未能解决你的问题,请参考以下文章
注册时的 ServiceWorker MIME 类型错误('text/html')(React)
在浏览器中出现错误 - 无法为范围注册 ServiceWorker
注册 ServiceWorker 失败:脚本具有不受支持的 MIME 类型 ('text/html')
Flutter 无法使用脚本为范围注册 ServiceWorker,该脚本具有不受支持的 MIME 类型
“未捕获(承诺)的DOMException:无法为范围注册ServiceWorker”-脚本资源位于重定向后面,不允许使用