Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从服务工作者调用缓存的ManifestEntry Javascript函数?_Javascript_Node.js_Vue.js_Service Worker_Workbox - Fatal编程技术网

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

如何从服务工作者调用缓存的ManifestEntry Javascript函数?,javascript,node.js,vue.js,service-worker,workbox,Javascript,Node.js,Vue.js,Service Worker,Workbox,我的构建生成一个预缓存清单,如下所示: self.__precacheManifest = [ { "revision": "ea92339a72de73748c35", "url": "/js/vendor.ea92339a.js" }, { "revision": "ce28c628eea246b643c9", "url": "/js/manifest.ce28c628.js" }, { "revision": "f6fb0d345

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

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"
  }
];
在我的服务人员中,我在顶部有以下内容:

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

下面是:

self.\uuu-prechemanifest=[].concat(self.\uu-prechemanifest | |【】)
workbox.precaching.precacheAndRoute(self.\u precacheManifest,{})

这是可行的,但是现在我想从服务人员那里调用
/js/vendor.ea92339a.js
中的一个方法,我该如何实现呢

额外信息: 我使用的构建过程是vue cli 3,

您不能

服务工作者有自己的作用域,它不同于通常的JS执行作用域(全局/窗口对象/任何东西)。不能从其他js文件调用SW.js中定义的函数,反之亦然

相反,您可以做的是@orangespark在其评论中建议的:


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

您可以使用vendor.js文件中的eventlistener来侦听service worker发布的事件,并触发回调函数