如何检查 HTTP 请求是否在浏览器中打开?

2022-01-15 00:00:00 xmlhttprequest javascript ajax

有没有一种简单的方法可以检测 XMLHttpRequest 在浏览器窗口中是否处于活动状态?或者有多少是活跃的?IE.有没有办法检测我的浏览器窗口中是否有任何 AJAX 调用处于活动状态?

Is there an easy way to detect if an XMLHttpRequest is active in the browser window? Or how many are active? ie. Is there a way to detect if there are any AJAX calls active in my browser window?

问题扩展: 使用 javascript 有没有办法可以查看是否打开了任何 XMLHttpRequests?比如window.XMLisActive()"之类的?

Extension of question: Using javascript is there a way I can see if any XMLHttpRequests are open? Such as "window.XMLisActive()" or something like that?

解决方案:最终为 XMLHttpRequest 编写了一个包装器:gist here

Solution: Ended up writing a wrapper for XMLHttpRequest: gist here

推荐答案

除非您为 XmlHttpRequest 编写一个包装器(或对其进行猴子补丁),否则无法检测来自 JS 的打开连接跟踪打开的连接.

There is not a way to detect an open connection from JS unless you write a wrapper for XmlHttpRequest (or monkey patch it) that keeps track of opened connections.

这里是kidcapital的猴子补丁,不确定是否完美,但这是一个好的开始

Here's kidcapital's monkey patch, not sure if it's perfect, but it's a good start

  (function() {
    var oldOpen = XMLHttpRequest.prototype.open;
    window.openHTTPs = 0;
    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
      window.openHTTPs++;
      this.addEventListener("readystatechange", function() {
          if(this.readyState == 4) {
            window.openHTTPs--;
          }
        }, false);
      oldOpen.call(this, method, url, async, user, pass);
    }
  })();

注意

这不处理 fetch 或 websockets,但你可以在这些情况下做类似的事情.

This does not handle fetch or websockets but you could do something similar in those cases.

相关文章