2013-12-22 18 views
-1

我正在編寫Chrome擴展。我有以下一段代碼。Chrome擴展中變量範圍的問題

function getCurrentTab() { 
    var r; 
    chrome.tabs.query({ 
    active:true, 
    currentWindow:true 
    },function (tabs) { 
    r=tabs[0]; 
    console.log(r); 
    }); 
    return r; 
} 

console.log(getCurrentTab()); 

我希望這個函數返回活動標籤。不幸的是,回調函數內部的歸因不會影響父函數getCurrentTab中的r,我無法弄清楚原因。

目前,此代碼寫入到控制檯:

undefined 
Object {active: true, height: 954, highlighted: true, id: 16, incognito: false…} 

期望的結果將是:

Object {active: true, height: 954, highlighted: true, id: 16, incognito: false…} 
Object {active: true, height: 954, highlighted: true, id: 16, incognito: false…} 
+0

您傳遞給曲線的回調ery函數是異步的,所以直到getCurrentTab返回後,分配纔會發生。 – Jack

+0

任何解決方法? – pandronic

+0

將回調函數傳遞給在查詢回調中調用的getCurrentTab方法,並將'r'作爲參數。 – Jack

回答

0

至於查詢功能的回調是異步的,你需要提供一個回調函數getCurrentTab函數並在那裏執行操作:

function getCurrentTab(callback) { 
    chrome.tabs.query({ 
     active:true, 
     currentWindow:true 
    }, function (tabs) { 
     callback(tabs[0]); 
    }); 
} 

getCurrentTab(function(r){ 
    console.log(r); 
    // ... other operations using current tab ... 
}); 
+0

不幸的是,這並沒有解決我的問題。如果可以避免使用任何回調,我更喜歡它。謝謝。 – pandronic

+0

有證據表明,你無法避免它:http://stackoverflow.com/questions/17748101/chrome-extensions-make-chrome-tabs-query-synchronous – Jack

+0

似乎這樣,它很爛:( – pandronic