Firefox:Service Worker:SecurityError:DOMException:操作不安全

问题描述 投票:0回答:7

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 目录下。

enter image description here

在 Firefox(版本 59.0.2)中检查我的 about:config,我启用了 Service Worker 和存储 API。所以这应该不是问题。

enter image description hereenter image description here

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

javascript firefox service-worker progressive-web-apps service-worker-events
7个回答
26
投票

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

enter image description here

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


13
投票

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

正确的 MIME 类型必须是

Content-Type: application/javascript; charset=UTF-8

5
投票

当您提供 Service Worker 文件本身时,通常需要使用

Service-Worker-Allowed
http 标头来托管它。如果此标头的值与您尝试在 Javascript 中注册服务工作人员的值不匹配,或者您尝试注册的范围超出了浏览器认为“安全”的范围,那么您将收到此错误.

ServiceWorkerContainer.register():

范围应用于指定位于同一目录中或比 Service Worker 嵌套更深的文档。如果您需要更广泛的范围,可以通过 HTTP Service-Worker-Allowed 标头来允许...

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


4
投票

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

Delete cookies and site data when Firefox is closed

单击

管理权限... 并输入 URL(例如 localhost:8000

)。单击
允许,然后单击右下角的保存更改。 Service Worker(和 Cookie 等)现在应该适用于此 URL,但不适用于其他 URL。

开发人员请注意,

localhost

 与例如
localhost:8000
(需要指定端口号)。


3
投票
对于 Firefox 80,我转到

about:Config

 并验证 
dom.serviceWorkers.enabled
 设置为 
true
enter image description here

然后我转到

about:preferences#privacy

 并取消选中 
Delete cookies and site data when Firefox is closed
,来自 
Mozilla enter image description here


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


3
投票
就我而言,调用

DOMException: The Operation is insecure

时出现错误
navigator.credentials.create()

以下是一些可能的原因:

    本地 XAMPP apache 被寻址为
  • 127.0.0.1
     而不是 
    localhost
    。 WebAuthn 不喜欢 IP 地址。
  • 我的环境使用 HTTP 而不是 HTTPS。
  • 我使用了 HTTP 的自定义端口,请参阅
  • “操作不安全”。在 firefox 上使用 Mailcow 的 navigator.credentials.create()
使用

https://localhost/

 和自签名(XAMPP 默认值)证书,而不是 
http://127.0.0.1:82/
,错误已解决。

© www.soinside.com 2019 - 2024. All rights reserved.