在For循环中逐个运行URL

时间:2014-03-27 16:32:33

标签: javascript html

我的数组中有几个URL,我想逐个运行它, 但是当我在循环中运行它时,它会同时执行所有操作并且不会等待。

以下是我的尝试:

<html>
    <head>
    <script>
        function work(){
            var otherStoryLinksArray = [];
            otherStoryLinksArray[0] = 'http://google.com';
            otherStoryLinksArray[1] = 'http://www.yahoo.com';
            otherStoryLinksArray[2] = 'http://gmail.com';
            for(var i=0;i<3;i++){   
                var openWindow = window.open(otherStoryLinksArray[i]);  
                setTimeout(function(){openWindow.close();},3000);
            }
        }
    </script>
    </head>
    <body onload=work();>
    </body>
</html>

我希望它打开一个URL,等待30秒,关闭弹出窗口,然后启动另一个URL。

等待你回复的人。任何帮助将不胜感激...

4 个答案:

答案 0 :(得分:1)

代码: http://jsfiddle.net/WgR4y/1/

演示: http://jsfiddle.net/WgR4y/1/show/(确保禁用弹出窗口拦截器)

适用于数组中无限数量的URL。

var otherStoryLinksArray = [
      'http://google.com',
      'http://www.yahoo.com',
      'http://gmail.com'
    ],
    timeToCloseWindow = 3000;

function work() {
    if(otherStoryLinksArray.length==0) return;
    var url = otherStoryLinksArray.shift();
    var openWindow = window.open(url);
    setTimeout(function () {
        openWindow.close();
        work();
    }, timeToCloseWindow);
}

work();

答案 1 :(得分:0)

您需要错开setTimeout次来电,因为setTimeout使用的是ms,30 s = 30000 ms:

   function work () {
        var otherStoryLinksArray = [];
        otherStoryLinksArray[0] = 'http://google.com';
        otherStoryLinksArray[1] = 'http://www.yahoo.com';
        otherStoryLinksArray[2] = 'http://gmail.com';

        for(var i=0; i<3; i++) {
            var openWindow;
            setTimeout(function () { 
                openWindow = window.open(otherStoryLinksArray[i]);
            }, 30000 * i); //Open this window

            setTimeout(function () {
                openWindow.close();
            }, 30000 * i + 30000); //Close it 30 seconds from "now"
        }
    }

答案 2 :(得分:0)

使用set interval而不是for-loop

function work(){
        var otherStoryLinksArray = [];
        otherStoryLinksArray[0] = 'http://google.com';
        otherStoryLinksArray[1] = 'http://www.yahoo.com';
        otherStoryLinksArray[2] = 'http://gmail.com';

        var myVar=setInterval(function(){myTimer()},3000);

        var i=0;
        var openWindow;
        function myTimer()
        {
            if(openWindow != null)
                openWindow.close();
            if(i < 3) 
            {                    
                openWindow = window.open(otherStoryLinksArray[i]);  
                i++;
            }
            else
                clearInterval(myVar);
        }

    }

答案 3 :(得分:0)

var otherStoryLinksArray = [
    'http://google.com',
    'http://www.yahoo.com',
    'http://gmail.com'];
var i = 0;
var openedWindow = null;
function loop(){
    openedWindow && openedWindow.close();
    if(otherStoryLinksArray[i]){
        var openedWindow = window.open(otherStoryLinksArray[i]);  
        i++;
        setTimeout(loop,30000);
    }
}