【问题标题】:Firefox: Service Worker: SecurityError: DOMException: The Operation is insecureFirefox:Service Worker:SecurityError:DOMException:操作不安全
【发布时间】:2018-09-07 10:07:48
【问题描述】:

app.js, 我正在检查 navigator 对象中是否存在 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 上运行良好。

【问题讨论】:

    标签: javascript firefox service-worker progressive-web-apps service-worker-events


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      当您为 service worker 文件本身提供服务时,您通常需要使用 Service-Worker-Allowed http 标头来托管它。如果此标头的值与您尝试在 Javascript 中注册服务工作者的值不匹配,或者您尝试注册的范围超出浏览器认为“安全”的范围,那么您将收到此错误.

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

      【讨论】:

        【解决方案3】:

        您可以保持“在 Firefox 关闭时删除 cookie 和网站数据”处于选中状态,只要您为您的网站创建例外。 (在 Firefox 78.0.2 中测试):

        点击管理权限...并输入一个URL(例如localhost:8000)。点击Allow,然后点击右下角的Save Changes。 Service Worker(和 cookie 等)现在应该适用于该 URL,但不适用于其他 URL。

        开发人员,请注意 localhost 与 e.g. 不同。 localhost:8000(需要指定端口号)。

        【讨论】:

          【解决方案4】:

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

          正确的 MIME-Type 必须是

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

          【讨论】:

            【解决方案5】:

            对于 Firefox 80,我转到 about:Config 并验证 dom.serviceWorkers.enabled 设置为 true

            然后我去了about:preferences#privacy 并取消选中Delete cookies and site data when Firefox is closed,来自Mozilla

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

              • 这个设置在firefox开发者版或firefox Quantum的哪里,我在about:preferences#privacy中找不到?
              • 如果我们作为开发人员有必要在 About:Config 和 about:preferences#privacy 中启用这些设置以使 Service Worker 实际工作或注册,那么他们不会被破坏或不注册对于实际访问该网站的几乎所有用户来说,大多数非开发人员不会启用这些设置?
              猜你喜欢
              • 2013-06-06
              • 2014-11-03
              • 2012-11-01
              • 2016-04-26
              • 2013-04-28
              • 2016-05-04
              • 2019-01-28
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多