2012-07-21 117 views
1

我在Chrome擴展的popup.js中有以下代碼。Chrome擴展全局變量奇怪

var tt; 
chrome.tabs.query({ active: true, currentWindow: true, windowType: 'normal' }, 
    function (tabs) { 
     tt = 5;  
}); 
document.getElementById('elm').textContent = tt; 

但奇怪的是,當訪問該功能的側TT的價值是不確定的,但它顯示「5」,如果document.getElementById('elm').textContent = tt;放在裏面的功能。那麼爲什麼當控制器退出函數時變量值不被保留?

我在這裏做錯了什麼?

此代碼在彈出窗口顯示時運行。即當瀏覽器動作的按鈕被點擊時,我簡化了代碼的可讀性。其實我試圖讓當前標籤的ID到一個變量。但沒有任何工作。

+0

[獲取當前選項卡並將其傳遞給Chrome擴展中的變量](http://stackoverflow.com/questions/10955408/get-current-tab-and-pass-it-to-variable-in -a-chrome-extension)(第三個結果來自[Google搜索「site:stackoverflow.com chrome.tabs.query異步」](https://encrypted.google.com/search?q=site:stackoverflow.com + chrome.tabs.query + asynchronous)以及[SO搜索「\ [google-chrome-extension \] + chrome.tabs.query + asynchronous]」的兩個結果之一(http://stackoverflow.com/search q =%5Bgoogle - 鉻 - 分機%5D +%2Bchrome.tabs.query +%2Basynchronous))。 – 2012-07-21 15:16:44

回答

1

剛剛找到答案,如果有人再次遇到這種情況,這就是發生了什麼事。

chrome.tabs.query是一個異步操作,所以稍後調用回調函數。但是document.getElementById('elm').textContent = tt;行在回調被調用之前被執行,並且引起了問題。當調試時,這並沒有發生,因爲逐步執行代碼會延遲該行的執行。