【问题标题】:How to open a specific quantity of webpages at preset intervals in JavaScript?如何在 JavaScript 中以预设的时间间隔打开特定数量的网页?
【发布时间】:2016-10-06 04:06:41
【问题描述】:

我对 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>

任何帮助将不胜感激,因为我一直在寻找解决方案,但似乎找不到。

【问题讨论】:

  • 为了澄清这个问题,当用户点击一个按钮时你想启动 20 个弹出窗口?

标签: javascript loops variables window.open


【解决方案1】:

使用 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 次。

【讨论】:

  • 谢谢。这非常有帮助。
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
相关资源
最近更新 更多