2013-11-13 3 views
1

Я пытаюсь создать chrome-плагин, где мне нужно захватить все сетевые запросы, запущенные на веб-странице. Я прошел через Docs @http://developer.chrome.com/extensions/devtools_network.htmlchrome.devtools.network.getHAR возвращает 0 записей

И я использую

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

}); 

Но каждый раз, когда я получаю 0 записей, даже при попытке открыть панель первой и обновите веб-страницу. Может кто-нибудь, пожалуйста, помогите, если есть что-то, чего я не вижу?

Я использую любой веб-страницу, чтобы проверить это, например, «http://www.cnn.com/» и установить разрешение в манифесте, как

"permissions": [ 
    "http://*/*", 
    "https://*/*" 
    ] 
+1

Зачем использовать 'devtools'? ** [chrome.webRequest] (http://developer.chrome.com/extensions/webRequest.html) ** кажется более полезным подходом. – gkalpak

+0

Эй, экспертная система, это помогает. Но так или иначе, чтобы читать сетевые запросы только для активной активной вкладки? Проблема, с которой я сталкиваюсь, - это текущая активная вкладка не будет известна из фоновой страницы ... и файл popup.js (специфичный для pageActionUI) не может подключать слушателей к сетевым запросам. – lucky

+0

Да, приведенный ниже пример дает хорошее понимание. Спасибо за вашу помощь, он работает – lucky

ответ

3

Вы можете прослушивать запросы и сделать фильтрацию на основе tabId поля. Конечно, вам нужно отслеживать активные вкладки (одна вкладка на окно).
т.д .:

  1. Использование chrome.tabs.onActivated прослушивать изменения в активной вкладке на widnow и хранить tabId в локальной переменной.

  2. chrome.windows.onRemoved, чтобы прекратить отслеживать вкладки для закрытых окон.

  3. Регистрация слушателя (ов) для любого из 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); 
}); 
+0

Спасибо, это помогло мне успешно создать мое расширение хром. – lucky

0

Вы должны ждать вашей загрузки страницы, чтобы закончить перед чтением HAR. Попробуйте что-то вроде этого:

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

Это займет 5 секунд, прежде чем читать HAR.

Смежные вопросы