0

我正在尝试创建一个返回当前选项卡 url 的函数:

function tabURL() {
var url="";
chrome.tabs.getSelected(null, function(tab) {url = tab.url;});
return url;
}

当我使用:

chrome.tabs.getSelected(null, function(tab) {alert(tab.url);});

Chrome 会显示 url,但如果我在 chrome 控制台中使用我的函数,该函数会返回“”。

有没有办法将 tab.url 传递给一个变量,然后返回这个变量?

4

1 回答 1

6

chrome.tabs.getSelected异步的。这意味着当回调函数被调用时,return url“已经发生”。

你有两种选择来达到预期的效果。

  1. 正确重写您的代码,以正确实现异步方面(具体细节取决于您的扩展的实现)。
    请注意,自 Chrome 16 起getSelected弃用并替换为。chrome.tabs.query

  2. chrome.tabs.onUpdated使用(添加 tabID + URL)、chrome.tabs.onRemoved(删除过时条目)和chrome.tabs.onActivated(设置当前活动选项卡)维护当前 URL 的散列。

代码 2:

// Our hash
var tabIdToURL = {};
var currentTabId = -1;
// Add changes to the hash (tab creation, tab's page load)
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    tabIdToURL[tabId] = tab.url; // also available as tab.id and changeInfo.url
});
// Remove entries from closed tabs
chrome.tabs.onRemoved.addListener(function(tabId) {
    delete tabIdToURL[tabId];
});
// Set the ID of the current active tab
chrome.tabs.onActivated.addListener(function(activeInfo) {
    currentTabId = activeInfo.tabId;
});

// Usage, based on the question's function
function getURL() {
    return tabIdToURL[currentTabId] || '';
}
于 2012-06-08T21:00:22.443 回答