javascript - 如何从 Service Worker 调用缓存的 ManifestEntry Javascript 函数?

标签 javascript node.js vue.js service-worker workbox

我的构建生成一个预缓存 list ,如下所示:

self.__precacheManifest = [
  {
    "revision": "ea92339a72de73748c35",
    "url": "/js/vendor.ea92339a.js"
  },
  {
    "revision": "ce28c628eea246b643c9",
    "url": "/js/manifest.ce28c628.js"
  },
  {
    "revision": "f6fb0d3455c4d454bfc9",
    "url": "/js/app.f6fb0d34.js"
  },
  {
    "revision": "dc4521ffd102851e081b02ac893f4981",
    "url": "/index.html"
  },
  {
    "revision": "f6fb0d3455c4d454bfc9",
    "url": "/css/app.69e433b0.css"
  }
];

在我的 Service Worker 中,我将其置于顶部:

importScripts("/precache-manifest.14324d3ff39abcb589e6152671cf34d2.js", "https://storage.googleapis.com/workbox-cdn/releases/3.0.1/workbox-sw.js");

底部是:

self.__precacheManifest = [].concat(self.__precacheManifest || []) workbox.precaching.precacheAndRoute(self.__precacheManifest, {})

这可行,但现在我想从 Service Worker 调用 /js/vendor.ea92339a.js 内部的方法,我该如何完成此操作?

额外信息: 我使用的构建过程是 vue-cli 3, webpack 4 branch (still in beta)

最佳答案

你不能。

Service Worker 有自己的作用域,与通常的 JS 执行作用域(全局/窗口对象/其他)不同。您不能从其他 JS 文件调用 SW.js 中定义的函数,反之亦然。

相反,你可以做的是 @orangespark 在他/她的评论中建议的:

您可以通过 postMessage API 从 SW.js 向窗口发送消息,或者反之亦然。您可以在vendor.js和SW.js中附加事件监听器,然后发送事件监听器将以您想要的任何方式处理的消息。

关于javascript - 如何从 Service Worker 调用缓存的 ManifestEntry Javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49610020/

相关文章:

javascript - 代码重构后对象为空

javascript - Bootstrap 崩溃在发布时无法正常工作(但它在本地工作)

javascript - CSS:如何水平而非垂直固定元素?

javascript - 使用 jQuery 单击文本区域时打开一个弹出窗口

javascript - 如何从 Vue js 中的方法访问数组中的属性?

javascript - 如何在 Axios 中处理 net::ERR_CONNECTION_REFUSED - Vue.js

vue.js - VueJS 类型错误 : alert is not a function

javascript - 如何检查本地存储中是否已存在项目/值

javascript - 而是将 index.js 的 require 更改为在所有 CommonJS 模块中都可用的动态 import()

javascript - 尝试按名称查找 channel