无法在Firefox中注册服务工作者,操作不安全

时间:2019-05-17 11:03:33

标签: javascript firefox-addon service-worker

我当前正在将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();
}

1 个答案:

答案 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