服务人员提取事件实际上如何工作?

时间:2019-06-14 10:05:34

标签: service-worker vue-cli-3 workbox-webpack-plugin

在Vue-CLI版本3中预缓存有工作箱Webpack插件的自定义服务工作者在听取获取事件时似乎不稳定。

在此应用程序的早期版本中使用了此服务工作者,但未安装工作盒和VueJS,并且其行为更加一致。

那是什么问题?问题在于,直到重新加载站点上的页面之前,服务工作者将不会听到任何获取事件,但是在网站上进行一些导航之后,可以将站点置于脱机模式,并且可以像服务工作者正在服务一样来缓存文件他们。从理论上讲,服务人员不会听到获取事件,因为控制台中本应在该事件侦听器中触发的日志从不会显示。

刷新页面后,服务人员会开始听到提取事件,就像您期望的那样,您可以在控制台中看到日志。

这是怎么回事?在该应用的先前版本中,如果服务人员听不到提取事件,则会显示错误页面。

我已经浏览了工作箱插件和Vue CLI文档,但是对此一无所获。我确实意识到您可以设置服务人员立即声明客户身份,这是我接下来要解决的“仅重载”问题,但我的问题与此无关。

服务工作者位于公共共享目录的根目录中,文件已预先缓存并存在于您期望的位置,等等。

在vue.config.js文件中:

pwa : {
    ...
    workboxOptions : {
      swSrc : './src/service-worker.js'
    },
    workboxPluginMode : 'InjectManifest'
  }

在service-worker.js中获取事件:

self.addEventListener('fetch', e => {
    console.log('[Service Worker] in process of fetching');
    console.log(e.request.url);
    // .... doStuff();
});

Workbox处理服务人员的实际注册,因此,一旦安装了主要的Vue组件,服务人员就已经完成了其安装和激活。

我希望,如果服务工作人员直到重新加载后才能听到提取事件,即使在浏览站点然后将其置于脱机模式之后,该应用程序的行为也将像典型的Web应用程序一样,并且会出错。另一方面,如果服务人员实际上正在听到提取事件,则应将这些事件记录在控制台中。实际结果介于两者之间:服务工作者没有听到获取事件,但是即使处于离线状态,即使没有刷新,应用程序仍然可以正常工作。

0 个答案:

没有答案