2011-02-23 70 views
2

我正在開發一個小擴展(https://docs.google.com/leaf?id=0B5ZSnXcRXnSpMmM0NTFiNGEtMzEzZS00M2YzLWI4MzItMmVmNmM3OGE1MDRh&hl=en&authkey=CLzGpOMN),它可以在關閉會話時保存特定窗口中的所有選項卡。 在此,當我嘗試恢復會話時,雖然新窗口已成功打開,但我沒有獲取調用的回調函數。Chrome擴展:回調函數沒有被調用

有趣的是,在開發人員模式下,使用開發人員工具時,回調函數被調用並恢復所有選項卡。 請幫幫我。

這裏是代碼:

function restoreTabs(saveTabName) 
{ 

var tabVals = window.localStorage.getItem(saveTabName); 

if (tabVals == null) 
    return; 

var callbackFunc = function (window, tabValList) { 
    //alert('created window'); 
    for (var i = 0; i < tabValList.length; i++) { 
     var tab = eval('(' + tabValList[i] + ')'); 
     var newTabObj = { 
      windowId: window.id, 
      index: tab.index, 
      url: tab.url, 
      selected: tab.selected, 
      pinned: tab.pinned 
     }; 
     chrome.tabs.create(newTabObj); 
    } 
}; 

var tabValList = tabVals.split('|'); 
chrome.windows.create(null, function (win) { callbackFunc(win, tabValList); }); 
} 

回答

4

有趣的問題。當你創建一個新窗口時彈出窗口會自動關閉(並且結果是彈出代碼執行被終止),這就是爲什麼它只能在開發者模式下工作,因爲它強制彈出窗口保持打開狀態。您需要將restoreTabs()函數移動到後臺頁面,仍然可以通過彈出窗口輕鬆調用它:

linka.onclick = function() { 
    chrome.extension.getBackgroundPage().restoreTabs('saveTabs'+savetabName); 
}; 
相關問題