0

重複の可能性:
Javascript: ページを開いてから数秒待ってから、同じウィンドウで別のページを開く方法

HTML内のすべてのリンクを同じウィンドウにロードしようとしました。ただし、最初のリンクのみが読み込まれます。Chrome で Web ページが定義されていないというエラー メッセージが表示されました。私はJavascriptにかなり慣れていないので、誰かが私を助けてくれませんか。ありがとう。コードは次のとおりです。

<!DOCTYPE html>
<html>
<head>
<script>

window.onload=function(){myFunction()};

function myFunction()
{
var links = document.links;

mywin=window.open("","mywindow");
mywin.location=links[0];
for(var i = 1; i < links.length; i++)
{
    setTimeout(function(){mywin.location=links[i];},5000);
} 
}

</script>
</head>
<body>
<h1><a href="http://www.yahoo.com">yahoo</a></h1>
<h1><a href="http://www.youtube.com">youtube</a></h1>
<h1><a href="http://www.google.com">google</a></h1>
</body>
</html
4

2 に答える 2

0

間隔を空けてページを開いていません。for ループは setTimeout を立て続けに実行し、コンテンツは 5 秒後に非常に立て続けに実行されます。For ループは非常に高速に循環し、各ループ間で数ミリ秒かかる場合があります。そのため、setTimeout の関数は 5 秒後に起動を開始しますが、各呼び出しの間に数ミリ秒しかありません。

次に、あなたの場合、ループは最後に i を 3 に増やします。関数が実際に呼び出されるとき。

mywin.location=links[i];

i は実際には 3 であり、未定義になります。

于 2012-10-30T08:13:52.707 に答える
0

これを試して:

function myFunction()
{
    var links = document.links;

    function open(win, i) {
        setTimeout(function() {
            win.location = links[i];
            if(i+1 < links.length) {
                open(win, i+1);
            }
        }, 5000);
    }

    mywin=window.open("","mywindow");
    mywin.location=links[0];
    open(mywin, 1);
}

open外部に書き込みたい場合は、3 番目の引数としてもmyFunction渡す必要があります。links

mywin編集:そして、おそらくどこにも変数を初期化していません。その前に置くvarと、オブジェクトが汚染されwindowます。

于 2012-10-30T08:23:45.197 に答える