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

How to retrieve the Initiator of a request when extending Chrome DevTool?

本文关键字:请求 检索 启动 DevTool 扩展 Chrome      更新时间:2023-09-26

我正在编写一个扩展,它需要知道在发出网络请求时谁负责。网络面板中的启动器正是我想要的。但我无法使用devtools.network或devtools.panels API获得它。是因为他们根本不公开这些信息,还是我遗漏了什么?

您的正确之处在于,启动器不是通过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=封装:铬&type=cs&l=148)。与Network中的启动器不同,它不会向您显示文档中导致加载静态引用资源的位置,但它会为您提供XHR和动态添加到文档中的资源的堆栈跟踪。

这可能在最初的答案后发生了变化,但为了将来参考,这可以通过监听网络事件的调试器扩展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扩展示例

中修改的