Javascript Chrome扩展:捕获打开的最新选项卡的URL

Javascript Chrome扩展:捕获打开的最新选项卡的URL,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,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, ch

我的目的是捕获使用内容脚本打开的最新选项卡的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\u script.js无法访问chrome.tabs对象。 然后我认为代码应该在background.js上。但是,background.js不知道当前网页何时与模式匹配

有这样做的想法吗?
谢谢大家!

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


如果您只需要带有内容脚本的选项卡,那么在初始化过程中只需从内容脚本中获取
postMessage
,并将该消息记录在您的后台页面中。

实际上,我尝试的是使用右键单击来检测何时打开了新选项卡。 因此,从content\u script.js我监听
node.oncontextmenu()
事件。在那里,我调用了
chrome.runtime.sendMessage()
将消息发送到background.js,然后调用
chrome.extension.onMessage.addListener()
等待“新标签打开”的background.js警告

与此同时,background.js在启用扩展后开始运行,通过调用
chrome.runtime.onMessage.addListener()
来侦听content\u script.js消息。然后,它将侦听一个新选项卡的打开,并告诉content\u 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) {});  
 }); 
 });

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

您还需要tab权限,否则“tab”对象将不完整(它将丢失tab.url)。为什么不在BG脚本中加入逻辑来检查匹配?