我正在开发一个小扩展程序(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); });
}
答案 0 :(得分:4)
有趣的问题。当您创建一个新窗口时弹出窗口会自动关闭(因此弹出代码执行被终止),这就是它在开发人员模式下工作的原因,因为它会强制弹出窗口保持打开状态。您需要将restoreTabs()
功能移动到后台页面,您仍然可以通过弹出窗口轻松调用它:
linka.onclick = function () {
chrome.extension.getBackgroundPage().restoreTabs('saveTabs'+savetabName);
};