JavaScript或ServiceWorkers可以检测网络活动/ Ajax事件吗?

时间:2016-06-09 06:40:00

标签: javascript ajax httprequest

ServiceWorker(或其他机制)是否有办法检测何时下载资源?

例如,如果发生以下任何情况,我希望收到通知:

  • <img src>下载
  • background-image: url(...)下载资源
  • 样式表遇到@import并且正在获取资源
  • <script src>下载
  • 某些脚本会调用新的XMLHTTPRequestfetch

缺少hacking open the XMLHttpRequest.prototype methods,JavaScript是否提供了收听网络活动的方法?

它与this question about idle network activity

相反

2 个答案:

答案 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部分。