Chrome扩展程序:已打开最新选项卡的捕获URL

时间:2014-07-15 09:03:37

标签: javascript google-chrome google-chrome-extension google-chrome-devtools

我的目的是捕获使用内容脚本打开的最新选项卡的URL。我想捕获新标签的URL,只要它是从与清单中指定的模式匹配的网页打开的。

我的第一个问题是在 content_script.js 中使用此代码,因此每当当前页面与模式匹配时都会执行此代码:

chrome.tabs.onCreated.addListener(function(tab) {
    /* tabs.onUpdated */
    chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){ 
        status = changeInfo.status;
    });
    while (status != 'complete'){
        chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){ 
            status = changeInfo.status;
        });
    }
    /* At this point, url tab is complete so I can capture it*/
});

问题是 content_script.js 无法访问chrome.tabs对象。 然后我虽然代码应该在 background.js 。但是, background.js 不知道当前网页何时与模式匹配。

这样做的任何想法? 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在后台页面中捕获并记录chrome.tabs个事件,然后通过onMessage提供最新的日志到内容脚本。

如果您只想要带有内容脚本的标签,那么在初始化期间只需从您的内容脚本中postMessage,并在后台页面中记录该消息。

答案 1 :(得分:0)

实际上,我尝试做的是使用右键单击检测何时打开新选项卡。 所以,从 content_script.js ,我会收听node.oncontextmenu()个事件。在那里,我致电chrome.runtime.sendMessage()将消息发送到 background.js ,然后chrome.extension.onMessage.addListener()等待 background.js 警告“新标签开”。

与此同时,自启用扩展程序以来已开始运行的 background.js 正在通过调用chrome.runtime.onMessage.addListener()来侦听 content_script.js 消息。然后它会侦听一个新标签打开,当发生这种情况时它会告诉 content_script.js

chrome.tabs.onCreated.addListener(function(tab) {
 chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
 chrome.tabs.sendMessage(tabs[0].id, {action: 'whatever'}, 
 function(response) {});  
 }); 
 });

我没有发布实际代码,因为它太乱了,你会感到困惑。