如何在扩展Chrome DevTool时检索请求的启动器?

时间:2013-07-15 09:05:35

标签: javascript google-chrome google-chrome-extension google-chrome-devtools

我正在编写一个扩展程序,需要知道在发出网络请求时谁负责。网络面板中的启动器正是我想要的。但我无法使用devtools.network或devtools.panels API。是因为他们根本没有暴露这些信息,或者我错过了什么?

2 个答案:

答案 0 :(得分:10)

你是正确的,因为启动器不是通过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扩展程序中访问它。 / p>

根据您尝试做的事情,实验性时间轴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的堆栈跟踪以及动态添加到文档中的资源。

答案 1 :(得分:3)

自原始答案以来,这可能已发生变化,但为了将来参考,可以通过debugger extension API收听network events

示例(在扩展名内)

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 extension example

修改
相关问题