12

ネットワーク要求が行われたときに誰が責任を負うかを知る必要がある拡張機能を作成しています。ネットワーク パネルのイニシエーターはまさに私が求めているものです。しかし、devtools.network または devtools.panels API を使用して取得できません。彼らが単にその情報を公開していないからですか、それとも私が何かを見逃しているからですか?

4

2 に答える 2

12

イニシエーターが devtools 拡張 API を介して公開されていないという点で、あなたは正しいです。現在、API が公開するリソース プロパティは、イニシエーターを含まない HAR 仕様のものに限定されています。生の DevTools プロトコル ( https://developers.google.com/chrome-developer-tools/docs/debugger-protocol ) を使用して、DevTools フロントエンドで利用できるすべてのデータを取得できます。Chrome拡張機能にも公開されていることに注意してください(http://developer.chrome.com/extensions/debugger.html)が、DevToolsフロントエンドが開いているときは使用できないため、 DevTools 拡張機能でアクセスできます。

何をしようとしているのかによって、実験的な Timeline API が役に立つかもしれません (このテストは、これがどのように行われるかを示しています: https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit /LayoutTests/inspector/extensions/extensions-events.html&q=webInspector.timeline&sq=package:chromium&type=cs&l=148 )。ネットワークのイニシエーターとは異なり、静的に参照されたリソースが読み込まれる原因となったドキュメント内の場所は表示されませんが、ドキュメントに動的に追加された XHR とリソースのスタック トレースが表示されます。

于 2013-07-16T12:59:47.370 に答える
4

これは元の回答から変更されている可能性がありますが、将来の参考のために、ネットワークイベントをリッスンするデバッガー拡張 APIを介してこれを行うことができます

例(拡張子内)

var tabId = parseInt(window.location.search.substring(1));

window.addEventListener("load", function() {
  chrome.debugger.sendCommand({tabId:tabId}, "Network.enable");
  chrome.debugger.onEvent.addListener(onEvent);
});

window.addEventListener("unload", function() {
  chrome.debugger.detach({tabId:tabId});
});

var requests = {};

function onEvent(debuggeeId, message, params) {
  if (tabId != debuggeeId.tabId)
    return;

  if (message == "Network.requestWillBeSent") {
    console.log(params.initiator);
  }
}

コードはHTTP 拡張の例から変更されました

于 2016-02-04T10:40:53.020 に答える