1

我想在同一个浏览器窗口中一个接一个地打开 10 个网页,并且有一些特定的延迟。

例如我想要

  1. 打开“www.Anywebsite.com”
  2. 延迟 5 秒
  3. 在同一页面中打开一个新的“www.Anywebsite.com”

我正在尝试做这样的事情

<!DOCTYPE html>
<html>
<body>

<script>
var myVar=setInterval(function(){myTimer()},1000);
var condOpen = 0;
function myTimer()

{
if (condOpen == 0)
{
window.open("http://www.tut.fi","_self"); 
condOpen = condOpen + 1;
}
else if(condOpen == 1)
{
window.open("www.w3schools.com","_self"); 
}
}
</script>

</body>
</html>

问题是它只打开第一页,当我读到“setInterval”时,它必须在一些延迟后执行指定的函数。请帮助我,我以前没有 JavaScript 经验,但这是我正在做的特定任务所必需的。

4

1 回答 1

1

您的代码失败了,因为当您window.open()使用_self参数调用时,它就像在做window.location = "http://www.example.com/";. 这会将您的页面替换为您正在加载的新页面。您页面上的所有 JavaScript 都被终止,包括任何计时器。

您可以执行您在此处尝试执行的操作,但您需要在window.open()调用中使用不同的目标窗口名称。您可以在此处编造任意名称;只是不要以名称开头_以避免特殊名称,例如_self.

不幸的是,如果您这样做,您将与弹出窗口阻止程序发生冲突。为了通过弹出窗口阻止程序,您需要做的是让第一个window.open()由用户操作直接触发,例如通过单击按钮。之后,您可以使用计时器来更改您打开的窗口中的 URL。

if此外,当您想在列表中添加更多 URL 时,您会厌倦编写语句。您可以使用 URL 数组来简化代码。

最后,缩进 JavaScript 代码以显示其结构是一个非常好的主意。将其全部放在左边距使得很难遵循。

把它们放在一起:

<!DOCTYPE html>

<html>
<head>
    <title>Window Loop Test</title>
</head>

<body>

<button onclick="start()">Start</button>

<script>
    var targets = [
        'http://www.stackoverflow.com/',
        'https://developer.mozilla.org/en-US/',
        'http://www.w3fools.com/'
    ];

    var iTarget;

    function nextTarget(){
        window.open( targets[iTarget], 'target' );
        if( ++iTarget >= targets.length ) {
            iTarget = 0;
        }
    }

    function start() {
        iTarget = 0;
        nextTarget();
        setInterval( nextTarget, 5000 );
    }
</script>


</body>
</html>

这是一个要测试的小提琴。

于 2013-07-12T10:23:36.987 回答