Google chrome extension google chrome扩展中的当前url错误

Google chrome extension google chrome扩展中的当前url错误,google-chrome-extension,Google Chrome Extension,我有一个google chrome扩展,在弹出窗口中单击显示。有一个上下文菜单,其中包含一些需要当前/活动选项卡url的选项。扩展有如下所述的问题 旧代码: function menuCallback(info, tab) { var currentUrl = tab.url; 使用旧代码:如果在弹出窗口中单击鼠标右键,则返回的当前url为“chrome extension…”等等 新代码:(我试图用解决此问题) 这是可行的,因为即使单击来自弹出窗口内部,它也会返回选项卡url。但是,如果我

我有一个google chrome扩展,在弹出窗口中单击显示。有一个上下文菜单,其中包含一些需要当前/活动选项卡url的选项。扩展有如下所述的问题

旧代码:

function menuCallback(info, tab) {

var currentUrl = tab.url;
使用旧代码:如果在弹出窗口中单击鼠标右键,则返回的当前url为“chrome extension…”等等

新代码:(我试图用解决此问题)


这是可行的,因为即使单击来自弹出窗口内部,它也会返回选项卡url。但是,如果我有10个打开的标签,并在两个标签之间切换,则总是返回旧的标签。例如,我首先在google.de,返回的url是google.de。现在我切换到一个已经打开的选项卡,比如“heise.de”,然后右键单击,它仍然是google.de。下一次尝试/尝试url是正确的。

您可能希望使用更新的
侦听器

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 ...
  } 
}
编辑:再次阅读您的问题后,您可能想要的是突出显示的。选择选项卡后,它立即返回一个包含
tabsIds
数组和
窗口的对象

chrome.tabs.onHighlighted.addListener(function(o) { tabId = o.tabIds[0]; })
然后,您可以使用
get
,以获取有关该特定选项卡的更多信息

chrome.tabs.get(tabId, function(tab) { ... })
我将保留未更新的
代码,以防任何人在页面更改时需要选项卡信息。

使用最简单的解决方案在当前聚焦的窗口中查找活动选项卡的URL如下所示

chrome.tabs.getSelected(null, function(tab) {
    var currentURL= tab.url;
    alert(currentURL); // this should give you current url.
}
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
  currentUrl = tabs[0].url;
});

谢谢但只有在加载新选项卡并完成加载时,才会调用此函数。当我有许多打开的选项卡并在1或2之间切换时,该函数不会再次被调用。您可以使用
changeInfo.status=='loading'
,或者干脆不使用它。@jjperezaguinaga:OP在所有完全加载的选项卡之间切换时,要求从窗口中获取活动选项卡的引用,如果您的
changeInfo
没有帮助,则不推荐使用chrome.tabs.getSelected。您的
new code
是在当前窗口中获取活动选项卡引用的正确方法,并共享您如何调用新代码的代码(我假设您知道chrome api的异步性质。*)。非常感谢,Sudarshan。我参与了这个项目,不知道异步的事情。成功了。
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
  currentUrl = tabs[0].url;
});