Google Chrome扩展程序中当前网址错误

时间:2013-01-14 11:50:03

标签: google-chrome-extension

我有一个谷歌浏览器扩展程序,在弹出窗口中单击显示。有一个上下文菜单,其中包含一些需要当前/活动选项卡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。下一次尝试/尝试网址是正确的。

3 个答案:

答案 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。选择标签后,它会返回一个数组为tabsIdswindow的对象。

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.
}