我有以下脚本在列表中打开网址:
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]);
}
但是,我想在打开每个网址之间添加延迟(让我们说大约5秒钟)。我怎样才能做到这一点?
我不熟悉功能。 Linux等通常要好得多。非常感谢您的见解。
答案 0 :(得分:1)
您可以这样做,以避免由setTimeout导致的非阻塞问题。
您需要的是等待在开始下一次迭代之前执行setTimeout。
var i = 0;
function openWindow(){
var x = document.getElementById('a').value.split('\n');
doLoop(x);
}
function doLoop(x)
setTimeout(function () {
if (x[i].indexOf('.') > 0){
if (x[i].indexOf('://') < 0){
window.open('http://'+x[i]);
}else{
window.open(x[i]);
}
}
i+=1;
if(i<x.length){
doLoop(x);
}
}, 5000)
}
使用自执行功能,它是这样的:
function openWindow() {
var i = 0;
var x = document.getElementById('a').value.split('\n');
(function fn() {
if(x[i].indexOf('.') > 0) {
if(x[i].indexOf('://') < 0) {
window.open('http://' + x[i++]);
} else {
window.open(x[i++]);
}
}
i++;
if( i < x.length ){
setTimeout( fn, 3000 );
}
})();
}
答案 1 :(得分:1)
更好的方法是使用setTimeout()和self-executing anonymous function:
function openWindow() {
var i = 0;
var x = document.getElementById('a').value.split('\n');
(function() {
if(typeof x[i] !== 'undefined') {
if(x[i].indexOf('.') > 0) {
if(x[i].indexOf('://') < 0) {
window.open('http://' + x[i++]);
} else {
window.open(x[i++]);
}
}
setTimeout(arguments.callee, 1000);
}
return false;
})();
}
这将保证在您的代码执行之前不会进行下一次调用。我在此示例中使用arguments.callee
作为函数引用。一旦数组中的索引不再存在,通过检查它是否未定义,它只返回false
而不是设置另一个timout。
答案 2 :(得分:0)
使用所有网址
创建数组xvar x = [url1, url2, url3, ...];
创建一个for循环
for(var i = 0; i<x.length; i++) {
setTimeout(function() {
window.open('http://'+x[i])}, 1000); // 1000 for 1 second
}
}
答案 3 :(得分:-1)
setInterval(function(){window.open('http://'+x[i]);},5000);