我当前正在将chrome扩展程序移植到Firefox,并且当我尝试注册Service Worker时,我得到:DOMException:操作不安全
我尝试查找cookie设置,但是未将其设置为“保持关闭,直到关闭浏览器”。我还尝试将证书添加到本地主机
我尝试同时使用它们进行注册
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();
}
答案 0 :(得分:0)
当我尝试将文件添加到项目目录之外的文件时,我遇到了这个问题。我能够很有趣地用先前注册的缓存抓取文件,但是无法重新注册或重新安装。
解决方案是调整服务UnityEditor
文件时设置的Service-Worker-Allowed
标头。以前,它只设置为项目URL /文件夹,但需要进行扩展,使其包含要缓存文件的所有父文件夹。
如果您对如何设置此标头感到困惑,我使用了一个PHP文件作为ServiceWorker文件。这使我可以设置必要的标头,然后将ServiceWorker文件放在服务器上的任何位置(尽管在下面的示例中,脚本与PHP文件位于同一文件夹中)。
index.php
ServiceWorker.js
然后,如果文件位于<?php
header("Service-Worker-Allowed: https://www.yoursite.com/");
header("Content-Type: application/javascript");
echo file_get_contents("ServiceWorker.js");
?>
文件夹中,则可以使用类似的方法进行注册。
ServiceWorker