Получить текущую вкладку и передать ее переменной в расширении Chrome

Я пытаюсь создать функцию, которая возвращает текущий 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, функция возвращает & quot; & quot ;.

Есть ли способ передать tab.url в переменную, а затем вернуть эту переменную?

 Collin08 июн. 2012 г., 22:13
Я ужасно запоминаю правила определения содержания javascript, но выполняет ли функция, в которую вы переходите,getSelected имеют те жеurl переменная как та, которую вы создали вtabURL()?

Ответы на вопрос(1)

Решение Вопроса

chrome.tabs.getSelected являетсяasynchronous, Это означает, что когда вызывается функция обратного вызова,return url "уже произошло".

У вас есть два варианта для достижения желаемого эффекта.

Properly rewrite your code, to correctly implement the asynchronous aspect (the exact details depends on your extension's implementation).
Note that getSelected has been deprecated and replaced with chrome.tabs.query since Chrome 16.

Maintain a hash with the current URLs using chrome.tabs.onUpdated (add tabID + URL), chrome.tabs.onRemoved (to remove obsolete entries) and chrome.tabs.onActivated (to set the current active tab).

Код для 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] || '';
}

Ваш ответ на вопрос