2

Web ページでトリガーされたすべてのネットワーク要求をキャプチャする必要がある chrome プラグインを構築しようとしています。私はDocs @ http://developer.chrome.com/extensions/devtools_network.htmlを見てきました

そして、私は使用しています

    chrome.devtools.network.getHAR(
    function(harLog) {
        alert(harLog.entries.length);

});

しかし、最初にパネルを開いてWebページを更新しようとしても、毎回エントリが0になります。不足しているものがあれば、助けてもらえますか??

「 http://www.cnn.com/ 」など、これをテストするために任意のWebページを使用しており、マニフェストで権限を次のように設定しています

"permissions": [
    "http://*/*",
    "https://*/*"
  ]
4

2 に答える 2

4

リクエストをリッスンし、フィールドに基づいてフィルタリングを行うことができtabIdます。もちろん、アクティブなタブ (ウィンドウごとに 1 つのタブ) を追跡する必要があります。
例えば:

  1. chrome.tabs.onActivatedを使用して、ウィンドウごとにアクティブなタブの変更をリッスンしtabId、ローカル変数に保存します。

  2. chrome.windows.onRemovedを使用して、閉じたウィンドウのタブの追跡を停止します。

  3. 目的に合ったchrome.webRequest.*イベントのリスナーを登録します。たとえば、リクエストの送信準備が整うとすぐにアクティブなタブのいずれかでリクエストの通知を受け取るには、chrome.webRequest.onBeforeRequestのリスナーを登録します。


以下は、まさにそれを行うサンプル拡張機能のソース コードです。

マニフェスト.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);
});
于 2013-11-21T09:39:07.157 に答える
0

HAR を読み取る前に、ページのダウンロードが完了するまで待つ必要があります。次のようなことを試してください:

var interval = setInterval( function() {
                   clearInterval(interval);
                   chrome.devtools.network.getHAR(
                          function(harLog) {
                              alert(harLog.entries.length);
                          });               
                    }, 5000 );

これは、HAR を読み取る前に 5 秒間待機します。

于 2015-08-01T01:08:26.373 に答える