24

app.js中,我正在检查 navigator 对象中是否存在 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我启用了 service worker 和 storage api。所以这应该不是问题。

在此处输入图像描述在此处输入图像描述

PS:相同的代码在 Chrome 上运行良好。

4

6 回答 6

22

您是否检查了 about:preferences#privacy 中的 cookie 设置,它必须是“保留到过期”,如果您选择了“保留到我关闭 firefox”,则不会注册。

在此处输入图像描述

您可以在此线程上找到详细信息: https ://bugzilla.mozilla.org/show_bug.cgi?id=1429714

于 2018-03-29T02:46:53.773 回答
7

如果 serviceworker 的文件使用错误的 MIME-Type 传递,同样的错误消息也会出现在 Firefox 中。在这种情况下,设置正确的 MIME-Type 可以解决问题。如果您动态地交付服务工作者的文件,例如使用 PHP,则可能会发生错误的 MIME 类型。

正确的 MIME 类型必须是

Content-Type: application/javascript; charset=UTF-8
于 2020-12-08T19:10:50.153 回答
3

只要您为您的站点创建一个例外,您就可以保持“在 Firefox 关闭时删除 cookie 和站点数据”处于选中状态。(在 Firefox 78.0.2 中测试):

关闭 Firefox 时删除 cookie 和站点数据

单击Manage Permissions...并输入 URL(例如localhost:8000)。单击Allow,然后单击Save Changes右下角的 。服务工作者(和 cookie 等)现在应该适用于该 URL,但不适用于其他 URL。

开发者,注意这localhost和eg不一样localhost:8000(需要指定端口号)。

于 2020-07-28T13:34:01.097 回答
2

当您为 service worker 文件本身提供服务时,您通常需要使用Service-Worker-Allowedhttp 标头来托管它。如果此标头的值与您尝试在 Javascript 中注册服务工作者的值不匹配,或者您尝试注册的范围超出浏览器认为“安全”的范围,那么您将收到此错误.

不止一次发生在我身上,我每次都在这里结束。至少我下次会帮助自己!

于 2021-02-03T06:52:39.543 回答
1

对于 Firefox 80,我去about:Config验证dom.serviceWorkers.enabled设置为true 在此处输入图像描述

然后我去Mozillaabout:preferences#privacy并取消Delete cookies and site data when Firefox is closed选中 在此处输入图像描述

于 2020-09-10T13:54:36.733 回答
1

就我而言,我删除了与该站点相关的所有先前数据(cookie、缓存等)。然后,Firefox 允许我注册新的 service worker。

于 2021-12-22T10:03:45.057 回答