这是关于在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()
添加回答
举报
0/150
提交
取消