2011-02-23 69 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); 
}; 
相关问题