chrome.devtools.network.getHAR返回0个条目

时间:2013-11-13 01:34:28

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

我正在尝试构建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://*/*"
  ]

2 个答案:

答案 0 :(得分:3)

您可以侦听请求并根据tabId字段进行过滤。当然,您需要跟踪活动标签(每个窗口一个标签) E.g:

  1. 使用 chrome.tabs.onActivated 监听每个widnow的活动标签中的更改,并将tabId存储在本地变量中。

  2. 使用 chrome.windows.onRemoved 停止跟踪关闭窗口的标签。

  3. 为适合您目的的任何 chrome.webRequest.* 事件注册听众。例如。要在准备好发送请求后立即通知其中一个活动标签中的任何请求,请为 chrome.webRequest.onBeforeRequest 注册听众。


  4. 以下是完全相同的示例扩展的源代码。

    <强>的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秒钟。