我正在尝试构建一个需要向用户加载大约200个新窗口的功能,但是在加载完成后关闭它们,或者在10秒之后关闭它们。
但是我知道同时打开多个页面实际上是不可能的,因为它会使客户端的浏览器崩溃。所以我要做的是管理新的window.opens,因为它只加载五乘五。一旦一个页面关闭,它就会从队列中加载另一个页面。
这是我到目前为止所做的:
var loadingQueue = localStorage.loadingQueue ? JSON.parse(localStorage.loadingQueue) : [];
var timeToLoad = 10000;
var windowArray = [];
var self = this;
var timedLoading = function () {
if (loadingQueue.length > 0 && windowArray.length < 6) {
loadingQueue = localStorage.loadingQueue ? JSON.parse(localStorage.loadingQueue) : [];
var url = loadingQueue.pop();
localStorage.setItem('loadingQueue', JSON.stringify(loadingQueue));
self.updateLength();
var newWindow = window.open(url, '_blank');
windowArray.push(newWindow);
setTimeout(function () {
var windowIndex = windowArray.indexOf(newWindow);
var curWindow = windowArray.splice(windowIndex, 1);
curWindow.close();
}, timeToLoad);
setTimeout(timedLoading, 1500);
}
};
timedLoading();
然而页面没有关闭。我只用了一页测试,在设定的时间后它关闭得很好。为什么我没有对许多窗户做同样的事情?
非常感谢任何提示。非常感谢
答案 0 :(得分:0)
我明白了。当Array.splice()返回一个数组时,我需要指定我正在处理的索引。
setTimeout(function () {
var windowIndex = windowArray.indexOf(newWindow);
var curWindow = windowArray.splice(windowIndex, 1);
curWindow[0].close();
}, timeToLoad);
这很有效。