我创建了一个Web应用程序,当用户点击某个nenu时,它会在新窗口中打开,如果用户已在某个窗口中打开该菜单以关注它。这很容易成为任务的一部分。我创建了一个window.open对象数组,其中包含一些用于任何菜单选项的键。
function menuWindows(index, URL){
if (openedWindows.length < index){
openedWindows.length = index;
}
if ((openedWindows[index] == undefined) || openedWindows[index].closed){
openedWindows[index]= window.open(URL, index);
setOpenedWindows();
} else {
openedWindows[index].focus();
}
}
我的想法是将这个数组存储在cookie中,然后在检查之前已经有一个打开的窗口从cookie加载数组。问题是当我尝试将该数组存储在cookie中时。我的函数的第一个版本存储数组在cookie中打开了窗口:
function setOpenedWindows(){
$.cookie('openedWindows', JSON.stringify(openedWindows));
}
在浏览器控制台中,错误是:“将循环结构转换为JSON”。 经过一次镜头搜索后,我找到了这个post,我的第二个版本的商店功能是:
function setOpenedWindows(){
var cache = [];
var ow = JSON.stringify(openedWindows, function(key, value) {
if (typeof value === 'object' && value !== null) {
if (cache.indexOf(value) !== -1) {
// Circular reference found, discard key
return;
}
// Store value in our collection
cache.push(value);
}
return value;
});
cache = null; // Enable garbage collection
$.cookie("openedWindows", ow);
}
现在我有这个错误:“未捕获的RangeError:超出了最大调用堆栈大小”,我不知道该怎么做。