为了账号安全,请及时绑定邮箱和手机立即绑定

Service Worker 获取事件:为什么没有无限循环?

Service Worker 获取事件:为什么没有无限循环?

至尊宝的传说 2023-08-05 10:17:24
这是关于在Service Workerfetch内部处理事件时的一些行为。当fetch调用事件处理程序内部时fetch(),fetch事件似乎不会再次触发。这实际上很好,但我仍然想知道为什么这没有发生。我查看了https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker#on_network_response上的代码,如下所示:self.addEventListener('fetch', function(event) {  event.respondWith(    caches.open('mysite-dynamic').then(function(cache) {      return cache.match(event.request).then(function (response) {        return response || fetch(event.request).then(function(response) {          cache.put(event.request, response.clone());          return response;        });      });    })  );});我自己尝试过该代码,并且执行fetch()了对(在||)之后的调用,但没有再次触发事件处理程序。为什么不?另外,一些解释这一点的页面链接将不胜感激。
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

正如评论中提到的,fetch()从服务工作者内部执行 a (即当全局对象为 时ServiceWorkerGlobalScope)永远不会触发处理fetch程序。

决定此行为的机制来自Fetch 规范第 5.6 节,描述fetch()第 5 步:

如果请求的客户端全局对象是 ServiceWorkerGlobalScope 对象,则将请求的service-workers 模式设置为“none”。

Service Worker 规范中还有许多其他场景,也描述了何时将 service-workers 模式设置为“none”,例如执行网络请求作为importScripts()


查看完整回答
反对 回复 2023-08-05
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信