我的构建生成一个预缓存 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/