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 )。与 Network 中的启动器不同,它不会向您显示文档中导致静态引用资源被加载的位置,但它会为您提供 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 回答