расширение chrome: функция обратного вызова не вызывается - PullRequest
2 голосов
/ 23 февраля 2011

Я разрабатываю небольшое расширение (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 Ответ

4 голосов
/ 23 февраля 2011

Интересная проблема. Всплывающее окно автоматически закрывается при создании нового окна (и в результате выполнение всплывающего кода прекращается), поэтому оно работает в режиме разработчика только потому, что заставляет всплывающее окно оставаться открытым. Вам нужно переместить функцию restoreTabs() на фоновую страницу, вы все равно можете легко вызвать ее из всплывающего окна:

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