2

私たちは過去に、XHR要求のみを傍受できるDevtools拡張を開発しようとしていました。 chrome.webRequest APIは通常の拡張機能で使用できますが、Devtools拡張パネルでは使用できません。私たちはdevtools.networkを使用しようとしましたが、すべての要求をキャッチします。Devtools ExtensionでXHR要求のみを取得する方法はありますか?

XHR要求のみをキャッチする方法はありますか?

ありがとうございます。

答えて

4

chrome.devtools.network APIを使用してHARを取得し、要求がXHRであるかどうかを判断して出力をフィルタリングできます。

私はDevToolsがこれをどのように判断するのか完全にはわかりませんが、AJAX要求が行われたときにX-Requested-Withヘッダーが(通常)送信されます。それは非標準ですが、広く使われています。 HARのXMLHttpRequest値を確認することができます。

DevToolsが使用する他のデータがありますが、このヘッダーに基づいてHARをフィルタリングするために作成した小さなスニペットがあります。

chrome.devtools.network.getHAR(function(result) { 
    var entries = result.entries; 
    var xhrEntries = entries.filter(function(entry) { 
     var headers = entry.request.headers; 

     var xhrHeader = headers.filter(function(header) { 
      return header.name.toLowerCase() === 'x-requested-with' 
       && header.value === 'XMLHttpRequest'; 
     }); 

     return xhrHeader.length > 0; 

    }); 

    console.log(xhrEntries); 
}); 

注意。 イベントを使用して、要求が完了したときと同じ方法でHARデータにアクセスできます。

+0

クイックレスポンスありがとう! 残念ながら、問題は私たちが多くのWebサイトでテストしており、その大半がX-Requested-Withヘッダーを使用していないことです。それにもかかわらず、この問題を念頭に置いて、あなたのソリューションは完璧に動作し、それ以外の方法がない場合は、おそらくそれに伴います。 –

+1

@BrunoSantos DevToolsがこのフィルタをどのように達成するかについて、私はグループに尋ねました。私はおそらく、XHRオブジェクトで何らかの計測を行って、サーバーに関連するものではなく要求の種類にフラグを立てていると思います。彼らはそれを達成することができる方法の1つですが、見ることができます。 –

+0

ありがとう!更新しておいてください。その間に役に立つものが見つかったら、ここでそれを共有します。 –

関連する問題