[英]Chrome Extension: Capture URL of the newest tab opened
我的目的是捕获使用内容脚本打开的最新选项卡的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不知道当前网页何时与模式匹配。
有这样做的想法吗? 谢谢!
您可以在后台页面中捕获并记录chrome.tabs
事件,然后通过onMessage
将最新日志记录到内容脚本中。
如果只希望使用带有内容脚本的选项卡,则只需在初始化期间使用内容脚本中的postMessage
并将该消息记录在后台页面中即可。
实际上,我尝试执行的操作是使用右键单击来检测何时打开新选项卡。 因此,我从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) {});
});
});
我没有发布实际的代码,因为它太乱了,您会感到困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.