chrome扩展:不调用回调函数

时间:2011-02-23 04:35:41

标签: javascript-events google-chrome-extension

我正在开发一个小扩展程序(https://docs.google.com/leaf?id=0B5ZSnXcRXnSpMmM0NTFiNGEtMzEzZS00M2YzLWI4MzItMmVmNmM3OGE1MDRh&hl=en&authkey=CLzGpOMN),用于保存特定窗口中的所有选项卡,同时关闭该会话。 在此,当我尝试恢复会话时,虽然新窗口已成功打开,但我没有调用回调函数。

有趣的是,在开发人员模式下,使用开发人员工具时,会调用回调函数并恢复所有选项卡。 请帮帮我。

这是代码:

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); });
}

1 个答案:

答案 0 :(得分:4)

有趣的问题。当您创建一个新窗口时弹出窗口会自动关闭(因此弹出代码执行被终止),这就是它在开发人员模式下工作的原因,因为它会强制弹出窗口保持打开状态。您需要将restoreTabs()功能移动到后台页面,您仍然可以通过弹出窗口轻松调用它:

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