我正在尝试构建chrome插件,我需要捕获网页上触发的所有网络请求。我已经阅读了文档@ http://developer.chrome.com/extensions/devtools_network.html
我正在使用
chrome.devtools.network.getHAR(
function(harLog) {
alert(harLog.entries.length);
});
但每次我收到0个条目,即使我尝试先打开面板并刷新网页。如果有什么我遗失的话,有人可以帮忙吗?
我正在使用任何网页对此进行测试,例如“http://www.cnn.com/”,并在清单中设置了权限
"permissions": [
"http://*/*",
"https://*/*"
]
答案 0 :(得分:3)
您可以侦听请求并根据tabId
字段进行过滤。当然,您需要跟踪活动标签(每个窗口一个标签)
E.g:
使用 chrome.tabs.onActivated 监听每个widnow的活动标签中的更改,并将tabId
存储在本地变量中。
使用 chrome.windows.onRemoved 停止跟踪关闭窗口的标签。
为适合您目的的任何 chrome.webRequest.* 事件注册听众。例如。要在准备好发送请求后立即通知其中一个活动标签中的任何请求,请为 chrome.webRequest.onBeforeRequest 注册听众。
以下是完全相同的示例扩展的源代码。
<强>的manifest.json:强>
{
"manifest_version": 2,
"name": "Test Extension",
"version": "0.0",
"offline_enabled": false,
"background": {
"persistent": true,
"scripts": ["background.js"]
},
"permissions": [
"webRequest",
"*://*/*"
]
}
<强> background.js:强>
/* Keep track of the active tab in each window */
var activeTabs = {};
chrome.tabs.onActivated.addListener(function(details) {
activeTabs[details.windowId] = details.tabId;
});
/* Clear the corresponding entry, whenever a window is closed */
chrome.windows.onRemoved.addListener(function(winId) {
delete(activeTabs[winId]);
});
/* Listen for web-requests and filter them */
chrome.webRequest.onBeforeRequest.addListener(function(details) {
if (details.tabId == -1) {
console.log("Skipping request from non-tabbed context...");
return;
}
var notInteresting = Object.keys(activeTabs).every(function(key) {
if (activeTabs[key] == details.tabId) {
/* We are interested in this request */
console.log("Check this out:", details);
return false;
} else {
return true;
}
});
if (notInteresting) {
/* We are not interested in this request */
console.log("Just ignore this one:", details);
}
}, { urls: ["<all_urls>"] });
/* Get the active tabs in all currently open windows */
chrome.tabs.query({ active: true }, function(tabs) {
tabs.forEach(function(tab) {
activeTabs[tab.windowId] = tab.id;
});
console.log("activeTabs = ", activeTabs);
});
答案 1 :(得分:0)
在阅读HAR之前,您需要等待页面下载完成。尝试这样的事情:
var interval = setInterval( function() {
clearInterval(interval);
chrome.devtools.network.getHAR(
function(harLog) {
alert(harLog.entries.length);
});
}, 5000 );
这将在读取HAR之前等待5秒钟。