Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在监视XMLHttpRequest时,如何检测请求是否为xhr?_Javascript_Google Chrome Extension_Xmlhttprequest_Google Chrome Devtools - Fatal编程技术网

Javascript 在监视XMLHttpRequest时,如何检测请求是否为xhr?

Javascript 在监视XMLHttpRequest时,如何检测请求是否为xhr?,javascript,google-chrome-extension,xmlhttprequest,google-chrome-devtools,Javascript,Google Chrome Extension,Xmlhttprequest,Google Chrome Devtools,我加了一个听者 chrome.debugger.onEvent.addListener(function(debuggeeId, message, params) { console.log(params); }); 控制台提供: documentURL: "someurl" frameId: "407.1" initiator: Object lineNumber: 114 type: "parser" url: "someurl" __proto__: Object

我加了一个听者

chrome.debugger.onEvent.addListener(function(debuggeeId, message, params) {
   console.log(params);
});
控制台提供:

documentURL: "someurl"
frameId: "407.1"
initiator: Object
  lineNumber: 114
  type: "parser"
  url: "someurl"
  __proto__: Object
loaderId: "407.7"
request: Object
  headers: Object
    Accept: "text/css,*/*;q=0.1"
    Cache-Control: "max-age=0"
    Referer: "someurl"
    User-Agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
    __proto__: Object
  method: "GET"
  url: "someurl"
  __proto__: Object
requestId: "407.861"
timestamp: 1402725779.200758

现在,如何查找请求类型是xhr、文档、脚本还是其他类型?

您可以在Chrome devtools中的“源”选项卡下找到“任意xhr”。

我的问题的解决方案可以在以下概念中找到:

当我们在chrome.onEvent泛型事件上添加侦听器时,无论何时调用任何事件,都会调用回调。每个事件都有一条特定的消息。真正的误解是:我在想一个请求应该输入'xhr'之类的

但实际上:请求永远不能有任何类型的xhr、文档等,而响应总是有类型的xhr、文档等

我只对一次出现的请求参数进行了安慰,因为正在使用消息调用该事件:Network.requestWillBeSent,我忽略了在其他出现的事件中显示响应参数

当消息为:Network.responseReceived时,将接收到一个响应参数,然后第三个参数params将具有一个属性类型,该属性类型将告知响应是xhr还是其他任何内容

chrome.debugger.onEvent.addListener(function(debuggeeId, message, params) {
   if(message == 'Network.requestWillBeSent') { //chrome requests to server
     console.log(params.type);  //always undefined (as request never have property 'type')
   } else if((message === "Network.responseReceived") { //chrome receives response
     console.log(params.type); //shows which type of response recieved (xhr, or something else)
     if(params.type == 'XHR') {
       //DO YOUR WORK WITH XHR
     }
   } else if(message == "Network.loadingFinished") {
     //Here loading is finished. and now chrome dev tool filter the responses  as per type (responses of only those requests whose response is received, rest requests are in pending queue at current timestamp)
   }
});
这就是chrome开发工具过滤网络的方式 Chrome不会决定请求的响应是“xhr”还是什么。因此,在收到响应之前,它将该类型保持为“挂起”。 当收到响应时,它会将网络分类为xhr、文档或css等。 请参阅图中的两个挂起的请求,它们在接收到响应后被替换为某些“类型”


有趣的但如何解释没有响应但无法加载两个请求的响应数据,并且它们的网络类型分别是XHR和Chrome developer工具中的文档