在app.js
中,
我正在检查导航器对象中是否存在serviceWorker,如果可用,则注册SW。
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./service-worker.js', { scope: './' })
.then(function(registration) {
console.log("Service Worker Registered!");
}).catch(function(err) {
console.log("Service Worker not registered!", err);
});
}
尝试注册SW时,我在Firefox中收到以下错误。我还确保service-worker.js
文件位于 src 目录下。
在Firefox(版本59.0.2)中检查我的about:config我启用了服务工作者和存储API。所以这应该不是问题。
PS:相同的代码在Chrome上运行良好。
答案 0 :(得分:3)
你是否检查过about:preferences#privacy中的cookie设置,它必须“保持到期”,如果你已经“保持”直到我关闭firefox'选定的sw不会注册。
您可以在此主题中找到的详细信息: https://bugzilla.mozilla.org/show_bug.cgi?id=1429714
答案 1 :(得分:0)
只要您为网站创建例外,就可以保持选中“ Delete cookies and site data when Firefox is closed”。 (在Firefox 78.0.2中测试)
点击“管理权限...”,然后输入一个网址(例如localhost:8000)。单击“允许”,然后单击右下角的“保存更改”。服务工作者(和Cookie等)现在应该可以使用此网址,但不能使用其他网址。
开发人员,请注意,“ localhost”与例如“ localhost:8000”(您需要指定端口号)。
答案 2 :(得分:0)
对于Firefox 80,我去了about:Config
并验证了dom.serviceWorkers.enabled
设置为true
然后我从Mozilla到about:preferences#privacy
并未选中Delete cookies and site data when Firefox is closed
答案 3 :(得分:0)
如果服务工作人员的文件传递的MINE-Type错误,则Firefox中也会出现相同的错误消息。在这种情况下,设置正确的MIME类型可以解决此问题。如果您动态交付服务工作人员的文件,例如,可能会出现错误的MIME类型。使用PHP。
正确的MIME类型必须为
Content-Type: application/javascript; charset=UTF-8
答案 4 :(得分:0)
当您提供 Service Worker 文件本身时,通常需要使用 Service-Worker-Allowed
http 标头来托管它。如果此标头的值与您尝试在 Javascript 中注册 Service Worker 的值不匹配,或者您尝试注册的范围超出浏览器认为“安全”的范围,那么您将收到此错误.
在我身上发生过不止一次,每次我都在这里结束。至少下次我会帮助自己!