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「既に発生している」ということです。

目的の効果を得るには、2 つのオプションがあります。

  1. コードを適切に書き直して、非同期の側面を正しく実装します (正確な詳細は、拡張機能の実装によって異なります)。は廃止され、Chrome 16 以降に置き換えられていることに
    注意してください。getSelectedchrome.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 に答える