管理多个window.open的Javascript

时间:2015-08-15 03:04:57

标签: javascript

我正在尝试构建一个需要向用户加载大约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();

然而页面没有关闭。我只用了一页测试,在设定的时间后它关闭得很好。为什么我没有对许多窗户做同样的事情?

非常感谢任何提示。非常感谢

1 个答案:

答案 0 :(得分:0)

我明白了。当Array.splice()返回一个数组时,我需要指定我正在处理的索引。

setTimeout(function () {
    var windowIndex = windowArray.indexOf(newWindow);
    var curWindow = windowArray.splice(windowIndex, 1);
    curWindow[0].close();
}, timeToLoad);

这很有效。

相关问题