javascript - Firefox无法注册Service Worker,操作不安全
问题描述
我目前正在将 chrome 扩展移植到 Firefox,当我尝试注册服务工作者时,我得到:DOMException:操作不安全
我尝试寻找 cookie 设置,但是,它没有设置为“保留直到浏览器关闭”。我还尝试将证书添加到 localhost
我尝试通过 usong 注册它
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./firebase-messaging-sw.js', { scope: '/' }).then(function(reg) {
if(reg.installing) {
console.log('Service worker installing');
} else if(reg.waiting) {
console.log('Service worker installed');
} else if(reg.active) {
console.log('Service worker active');
}
}).catch(function(error) {
console.log('Registration failed with ' + error);
});
}
并使用
const runtime = require('serviceworker-webpack-plugin/lib/runtime');
if ('serviceWorker' in navigator) {
const registration = runtime.register();
}
解决方案
当我尝试将文件添加到项目目录之外的缓存时,我遇到了这个问题。有趣的是,我能够使用以前注册的缓存抓取文件,但无法重新注册或重新安装。
解决方案是调整Service-Worker-Allowed
提供文件时设置的标题ServiceWorker.js
。以前它只设置为项目 URL/文件夹,但需要对其进行扩展,以使其包含要缓存的文件的所有父文件夹。
如果您对如何设置此标头感到困惑,我使用了一个 PHP 文件作为 ServiceWorker 文件;这允许我设置必要的标头,然后将 ServiceWorker 文件放在我的服务器上的任何位置(尽管在下面的示例中,脚本与 PHP 文件位于同一文件夹中)。
索引.php
<?php
header("Service-Worker-Allowed: https://www.yoursite.com/");
header("Content-Type: application/javascript");
echo file_get_contents("ServiceWorker.js");
?>
然后,如果您的文件在ServiceWorker
文件夹中,您可以使用类似的方式注册它。
navigator.serviceWorker.register(
'ServiceWorker/',
{scope:"https://www.yoursite.com/"})
.then(function(reg){},function(err){});
推荐阅读
- excel - 过滤数据并将其从多张工作表复制到一张工作表
- php - 之前如何发送自定义消息,代理会话发送实际消息
- laravel - 使用 Laravel-Websockets 向特定用户发送消息(一对一聊天)
- android - startAfter() 方法使应用程序 Firestore 数据库崩溃
- c# - 如何存储引用以避免在c#中解构
- html - 绝对定位的子 div 离开父 div
- python - 如果超过 x 个字符,如何从文件中删除行
- apache - 将 csv 转换为具有 200 万条记录的 pdf 时出现 OutOfMemoryException
- python - 英特尔 MKL 无法加载。英特尔 MKL 致命错误:无法加载 libmkl_core.dylib
- java - 域文件夹在 Spring Boot 项目中做什么以及应该存储哪些类?