我正在编写一个扩展程序,它需要知道在发出网络请求时谁负责。网络面板的发起者正是我想要的。但我无法使用 devtools.network 或 devtools.panels API 获得它。是因为他们根本没有公开这些信息还是我遗漏了什么?
2 回答
您是正确的,因为启动器没有通过 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 和动态添加到文档中的资源的堆栈跟踪。
这可能自原始答案以来已经改变,但为了将来参考,这可以通过侦听网络事件的调试器扩展 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 扩展示例修改的