如何从服务工作者调用缓存的 ManifestEntry Javascript 函数?

How can I call cached ManifestEntry Javascript functions from the service worker?

我的构建生成如下所示的预缓存清单:

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 执行作用域(全局/window 对象/其他)。您不能从其他 JS 文件调用 SW.js 中定义的函数,反之亦然。

您可以做的是 @orangespark 在 his/her 评论中建议的:

您可以通过 postMessage API 从 SW.js 发送消息到 window 或相反。您可以在 vendor.js 和 SW.js 中附加事件侦听器,然后发送事件侦听器将以您想要的任何方式处理的消息。