2016-08-24 25 views
0

chrome.webRequest.onBeforeRequest我們得到的URL的種種 - 的JavaScript,CSS等獲取文檔的URL中chrome.webRequest.onBeforeRequest

對於每一個網址我想知道主選項卡URL。

什麼是最簡單的方法來同步?

現在,我用這種方式:


如果details.frameId == 0然後details.url包含該標籤ID主選項卡URL

chrome.webRequest.onBeforeRequest.addListener(
     function (details) { 

      if (details.tabId == -1) 
      { 
       return; 
      } 


      if ("type" in details && ['main_frame', 'sub_frame'].indexOf(details.type) !== -1) 
      { 
       if (details.frameId == 0) { 
        all_tabs_info.add_tab_info(details.tabId, details.url); 
       } 
      } 


     }, 
     { 
      urls: ['<all_urls>'] 
     }, 
["blocking"]); 


所以現在起,如果任何請求到來的這個標籤ID我們已經有了標籤url。這種粗略的邏輯似乎在起作用。

回答

0

一對夫婦的增強功能:

  • 使用filters as much as possible,在這種情況下type
  • main_frame類型by definition對應於頂層框架,這反過來意味着它的frameId爲0,所以通過不聽sub_frame您可以完全省略檢查。

    值0表示請求發生在主框架中;正值表示請求發生的子幀的ID。如果(子)幀的文檔被加載(類型是main_frame或sub_frame),frameId表示該幀的ID,而不是外部幀的ID。框架ID在選項卡內是唯一的。

  • type不是可選的,因爲您可以在文檔中看到,不需要懷疑它的存在。

因此簡化代碼僅僅是這樣的:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
     if (details.tabId >= 0) { 
      all_tabs_info.add_tab_info(details.tabId, details.url); 
     } 
    }, 
    { 
     urls: ['<all_urls>'], 
     types: ['main_frame'], 
    }, 
    ["blocking"] 
);