在chrome.webRequest.onBeforeRequest中获取文档URL

时间:2016-08-24 05:23:36

标签: google-chrome-extension

chrome.webRequest.onBeforeRequest我们会收到各种网址 - javascript,css等。

对于每个网址,我想知道主标签网址。

同步获取它的最简单方法是什么?

现在我用这种方式:

如果details.frameId == 0,则details.url包含此标签ID

的主标签网址
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有任何请求,我们已经有了标签网址。这种粗略的逻辑似乎有效。

1 个答案:

答案 0 :(得分:1)

一些增强功能:

  • 使用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"]
);