我有一个谷歌浏览器扩展程序,在弹出窗口中单击显示。有一个上下文菜单,其中包含一些需要当前/活动选项卡URL的选项。扩展程序有下述问题。
旧代码:
function menuCallback(info, tab) {
var currentUrl = tab.url;
使用旧代码:如果右键单击弹出窗口,返回的当前网址为“chrome-extension ...”,依此类推。
新代码:(我试图解决此问题)
chrome.tabs.query({'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT},
function(tabs){
currentUrl = tabs[0].url;
}
);
这很有效,因为即使点击来自弹出窗口,它也会返回标签网址。但是,如果我有10个打开的标签并在两个之间切换,则始终返回旧标签。例如,我首先访问google.de,返回的网址是google.de。现在我切换到已经打开的标签,如“heise.de”并右键单击,它仍然是google.de。下一次尝试/尝试网址是正确的。
答案 0 :(得分:1)
您可能想要使用onUpdated
侦听器。
chrome.tabs.onUpdated.addListener(doSomething);
它为您提供了tabId,changeInfo和tab元数据。然后你可以随意做:
var doSomething = function (tabId, changeInfo, tab) {
var match = /http:\/\/www.google.com/.exec(tab.url);
if(match && changeInfo.status == 'complete') {
... do something ...
}
}
编辑:再次阅读你的问题之后,你可能想要的是 onHighlighted event listener。选择标签后,它会返回一个数组为tabsIds
和window
的对象。
chrome.tabs.onHighlighted.addListener(function(o) { tabId = o.tabIds[0]; })
然后,您可以使用get
获取有关该特定标签的更多信息。
chrome.tabs.get(tabId, function(tab) { ... })
我将离开onUpdated
代码,以防任何人在页面发生变化时想要标签信息。
答案 1 :(得分:0)
使用query parameters最简单的解决方案来查找当前关注窗口中活动选项卡的URL,如下所示。
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
currentUrl = tabs[0].url;
});
答案 2 :(得分:-1)
chrome.tabs.getSelected(null, function(tab) {
var currentURL= tab.url;
alert(currentURL); // this should give you current url.
}