Para evitar congelar todo el navegador (con una función de retraso), puede usar setTimeOutpara ejecutar una función a 20000 milisegundos de diferencia.
Todos setTimeoutse ejecutan uno tras otro. Hay una función programada en cada milisegundo de tiempo. Cada ciclo, el parámetro atTime aumenta en 20000 (20 segundos). Después de eso, su página permanece inactiva y las funciones setTimeout se ejecutan en los momentos asignados.
Tenga en cuenta el setTimeout("window.open('" + site + "')", atTime);. No podemos hacerlo setTimeout(window.open(site), atTime);porque la función entre setTimeout se evalúa en el momento de la ejecución y la variable sitetendrá el último valor del bucle. Entonces hacemos un cambio setTimeout("window.open('xxx')", atTime);donde xxx cambia en el ciclo. De esta manera, la variable se establece en el comando de ejecución. (Espero que sea lo suficientemente claro)
Aquí está el guión:
<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>