ServiceWorker
(或其他机制)是否有办法检测何时下载资源?
例如,如果发生以下任何情况,我希望收到通知:
<img src>
下载background-image: url(...)
下载资源@import
并且正在获取资源<script src>
下载XMLHTTPRequest
或fetch
缺少hacking open the XMLHttpRequest.prototype
methods,JavaScript是否提供了收听网络活动的方法?
答案 0 :(得分:11)
是的,服务工作者会捕获您列出的所有获取事件。注册服务人员:
navigator.serviceWorker.register('/service-worker.js');
在服务工作者脚本中,为fetch
事件安装处理程序:
// `self` is a ServiceWorkerGlobalScope
self.addEventListener('fetch', function(event) {
console.log("fetch event:", event.request.url);
});
这是一个plunker来证明这一点。您需要从实时预览中运行两次演示(一次注册服务工作者,再次查看控制台中的获取事件)。不要忘记从DevTools取消注册服务工作者作为清理: DevTools&gt;资源/应用&gt;服务工作者(左图)&gt;删除(右)。
答案 1 :(得分:3)
是的,这就是ServiceWorker的重点。
ServiceWorker的限制(根据规范):您无法拦截<object
&gt;的请求或<embed>
资源,或导航请求。这两个限制都被设计为安全措施。
我建议您开始阅读ServiceWorker规范的Handle Fetch部分。