Firefox: Service Worker: SecurityError: DOMException: The Operation is insecure
Firefox: Service Worker: SecurityError: DOMException: The Operation is insecure
在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.
上运行良好
你有没有检查about:preferences#privacy中的cookie设置,它必须是'keep until they expire',如果你'keep until I close firefox'选择了sw将不会注册。
您可以在此线程中找到详细信息:
https://bugzilla.mozilla.org/show_bug.cgi?id=1429714
您可以保持选中“关闭 Firefox 时删除 cookie 和站点数据”,只要您为站点创建例外。 (在 Firefox 78.0.2 中测试):
单击 管理权限... 并输入 URL(例如 localhost:8000
)。点击允许,然后点击右下角的保存更改。服务人员(和 cookie 等)现在应该为这个 URL 工作,但不为其他 URL 工作。
开发者,请注意 localhost
与例如localhost:8000
(需要指定端口号)
对于 Firefox 80,我转到 about:Config
并验证 dom.serviceWorkers.enabled
设置为 true
然后我从 Mozilla 转到 about:preferences#privacy
并取消选中 Delete cookies and site data when Firefox is closed
如果 serviceworker 的文件使用错误的 MIME 类型传送,同样的错误消息也会出现在 Firefox 中。在这种情况下,设置正确的 MIME 类型可以解决问题。如果您动态地传送 serviceworker 的文件,例如,可能会发生错误的 MIME 类型使用 PHP.
正确的 MIME 类型必须是
Content-Type: application/javascript; charset=UTF-8
当您提供 Service Worker 文件本身时,通常需要使用 Service-Worker-Allowed
http header 来托管它。如果此 header 的值与您在 Javascript 中尝试注册 Service Worker 的值不匹配,或者如果您尝试注册的范围超出浏览器认为的范围 'secure',那么你会得到这个错误。
不止一次发生在我身上,我每次都在这里结束。至少我下次能帮到自己!
在我的例子中,我删除了与该站点相关的所有先前数据(cookie、缓存等)。然后,Firefox 允许我注册新的 service worker。
在我的例子中,错误 DOMException: The Operation is insecure
在调用 navigator.credentials.create()
时发生。
以下是一些可能的原因:
- 本地 XAMPP apache 被寻址为
127.0.0.1
而不是 localhost
。 WebAuthn 不喜欢 IP 地址。
- 我的环境使用 HTTP 而不是 HTTPS。
- 我为 HTTP 使用了自定义端口,请参阅
使用 https://localhost/
和 self-signed(XAMPP 默认值)证书,而不是 http://127.0.0.1:82/
,错误已解决。
在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.
上运行良好你有没有检查about:preferences#privacy中的cookie设置,它必须是'keep until they expire',如果你'keep until I close firefox'选择了sw将不会注册。
您可以在此线程中找到详细信息: https://bugzilla.mozilla.org/show_bug.cgi?id=1429714
您可以保持选中“关闭 Firefox 时删除 cookie 和站点数据”,只要您为站点创建例外。 (在 Firefox 78.0.2 中测试):
单击 管理权限... 并输入 URL(例如 localhost:8000
)。点击允许,然后点击右下角的保存更改。服务人员(和 cookie 等)现在应该为这个 URL 工作,但不为其他 URL 工作。
开发者,请注意 localhost
与例如localhost:8000
(需要指定端口号)
对于 Firefox 80,我转到 about:Config
并验证 dom.serviceWorkers.enabled
设置为 true
然后我从 Mozilla 转到 about:preferences#privacy
并取消选中 Delete cookies and site data when Firefox is closed
如果 serviceworker 的文件使用错误的 MIME 类型传送,同样的错误消息也会出现在 Firefox 中。在这种情况下,设置正确的 MIME 类型可以解决问题。如果您动态地传送 serviceworker 的文件,例如,可能会发生错误的 MIME 类型使用 PHP.
正确的 MIME 类型必须是
Content-Type: application/javascript; charset=UTF-8
当您提供 Service Worker 文件本身时,通常需要使用 Service-Worker-Allowed
http header 来托管它。如果此 header 的值与您在 Javascript 中尝试注册 Service Worker 的值不匹配,或者如果您尝试注册的范围超出浏览器认为的范围 'secure',那么你会得到这个错误。
不止一次发生在我身上,我每次都在这里结束。至少我下次能帮到自己!
在我的例子中,我删除了与该站点相关的所有先前数据(cookie、缓存等)。然后,Firefox 允许我注册新的 service worker。
在我的例子中,错误 DOMException: The Operation is insecure
在调用 navigator.credentials.create()
时发生。
以下是一些可能的原因:
- 本地 XAMPP apache 被寻址为
127.0.0.1
而不是localhost
。 WebAuthn 不喜欢 IP 地址。 - 我的环境使用 HTTP 而不是 HTTPS。
- 我为 HTTP 使用了自定义端口,请参阅
使用 https://localhost/
和 self-signed(XAMPP 默认值)证书,而不是 http://127.0.0.1:82/
,错误已解决。