如何在JavaScript中按预设的时间间隔打开特定数量的网页?

时间:2016-10-06 04:06:41

标签: javascript loops variables window.open

我对JavaScript比较陌生。我想让用户点击一个按钮,每隔3秒打开一个特定的网页(在这种情况下是视频),共20页。我似乎无法弄清楚如何使用任何类型的循环,而不是循环window.open()(有效地崩溃我的浏览器)或导致网页根本没有加载由于另一个循环或导致所有选项卡马上打开。以下是我迄今为止对JS的看法:

var numberOfVids = 20;
var vidNumber = 1;
var website = "http://example.com";
var myVar;

function executeVidBot() {
     myVar = setInterval(openVid, 3000);
}

function openVid() {
     window.open(website);
     vidNumber++;
}

这是我的HTML:

<!DOCTYPE html>
<html>
<body>

<p>Click the button to execute the VidBot.</p>

<button onclick="executeVidBot()">Execute VidBot</button>

<script src="vidbot.js"></script>

</body>
</html>

任何帮助都会非常受欢迎,因为我一直在寻找解决方案,但似乎无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

使用setInterval是定期执行代码的正确方法,但是当你的openVid()函数达到限制时,你需要手动停止间隔:

function openVid() {
    window.open(website);
    vidNumber++;
    if (vidNumber == numberOfVids) {
        clearInterval(myVar);
    }
}

然而,第一个函数调用将不会执行3秒。您可以手动调用它立即执行。

function executeVidBot() {
    openVid(); // Execute now
    myVar = setInterval(openVid, 3000); // Execute in 3 seconds
}

如果你想使用for循环,你需要使用setTimeout而不执行一次:

for (var i = 0; i < numberOfVids; i++) {
    setTimeout(openVid, 3000 * i);
}

由于可能存在滥用行为,大多数浏览器都会阻止多个window.open调用。例如Chrome会阻止它们并显示消息“以下弹出窗口已被阻止从此页面”。如果你试图做一些可能会惹恼用户的事情,我会建议你不这样做。

如果您正在执行其他类似测试任务的事情,您需要打开页面20次,最好使用像PhantomJs这样的无头浏览器来自动完成任务,即加载页面并单击按钮20次或直接加载页面20次。