2016-08-24 28 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"] 
);