我的目的是捕获使用内容脚本打开的最新选项卡的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 不知道当前网页何时与模式匹配。
这样做的任何想法? 谢谢!
答案 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) {});
});
});
我没有发布实际代码,因为它太乱了,你会感到困惑。