Abra uma lista de URLs, cada uma com 20-30s de atraso

0

Eu tenho o seguinte script de um post do Dennis de este URL

É exatamente o que estou procurando, mas preciso abrir cada URL de 20 a 30 segundos de intervalo.

<script>
function openWindow(){
    var x = document.getElementById('a').value.split('\n');
    for (var i = 0; i < x.length; i++)
        if (x[i].indexOf('.') > 0)
            if (x[i].indexOf('://') < 0)
                window.open('http://'+x[i]);
            else
                window.open(x[i]);
}
</script>

Alguém pode ajudar?

    
por Louwrens Kokke 23.09.2013 / 12:42

1 resposta

0

Para evitar o congelamento de todo o navegador (com uma função de atraso), você pode usar setTimeOut para executar uma função com 20000 milissegundos de intervalo.

Todos os setTimeout são executados um após o outro. Existe uma função agendada em cada milésimo de segundo atTime. Cada loop do parâmetro atTime é aumentado em 20.000 (20 segundos). Depois disso, sua página permanece inativa e as funções setTimeout são executadas nos horários designados.

Observe o setTimeout("window.open('" + site + "')", atTime); . Não podemos fazer setTimeout(window.open(site), atTime); porque a função entre setTimeout é avaliada no tempo de execução e a variável site terá o último valor do loop. Então nós fazemos um setTimeout("window.open('xxx')", atTime); onde xxx muda no loop. Desta forma, a variável é definida no comando de execução. (Espero que eu esteja claro o suficiente)

Aqui está o script:

<script>
function openWindow(){
    var x = document.getElementById('a').value.split('\n');
    atTime = 0;
    for (var i = 0; i < x.length; i++) {
      if (x[i].indexOf('.') > 0) {
        site = x[i];
        if (x[i].indexOf('://') < 0) { site = 'http://' + x[i]; }
        setTimeout("window.open('" + site + "')", atTime);
        atTime += 20000;
      }
    }
}
</script>
    
por 23.09.2013 / 13:12

Tags