【问题标题】:Web worker importScripts DOMException script failed to loadWeb Worker importScripts DOMException 脚本未能加载
【发布时间】:2019-08-13 15:33:11
【问题描述】:

我正在尝试使用importScripts

self.addEventListener('fetch', event => {
  ...
  self.importScripts('idb.js');
  ...
}

为 PWA 的 Service Worker 加载库,但不断获取

DOMException: Failed to execute 'importScripts' on 'WorkerGlobalScope': 
    The script at 'http://localhost:3000/idb.js' failed to load.

脚本文件在那里,内容类型正确,application/javascript,我也试过text/javascript。我的开发人员工具网络选项卡显示请求开始然后很快失败,没有机会访问服务器。通过 http 时状态码为 (failed) net::ERR_CONNECTION_REFUSED,通过 https 时为 (failed) net::ERR_FAILED。任何帮助表示赞赏

【问题讨论】:

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


    【解决方案1】:

    根据https://developers.google.com/web/updates/2018/10/tweaks-to-addAll-importScripts

    在 Chrome 71 之前,可以在安装处理程序之外异步调用 importScripts()。从 Chrome 71 开始,这些调用会引发运行时异常(除非之前在安装处理程序中导入了相同的 URL),与其他浏览器中的行为匹配。

    我必须将 importScripts 移动到我的文件或我的安装处理程序的顶层并且它可以工作

    【讨论】:

      【解决方案2】:

      根据您提供的链接,您没有在 HTTPS 下运行。你需要一个 HTTPS 下的站点才能使用 service worker。

      我原来的帖子错了。 @kmanzana 指出 localhost 被认为是“安全来源”。

      【讨论】:

      • “服务工作者只能用于“安全来源”(基本上是 HTTPS 站点)...localhost 也被认为是安全来源”来自chromium.org/blink/serviceworker/service-worker-faq
      • 我刚刚检查以确保并使用 https 通过 ngrok 提供此文件,但我仍然看到同样的问题
      • 好吧。获取时收到的状态码是什么?直接导航时能看到响应吗?
      • 实际上,状态码是(failed) net::ERR_CONNECTION_REFUSED,通过http 和https 是(failed) net::ERR_FAILED。我可以通过导航或 curl 看到响应
      • 好吧,我很抱歉。我尝试使用 HTTPS 和 HTTP 在本地重新创建,但没有成功。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 2021-01-05
      相关资源
      最近更新 更多