1

あきらめる。これはとても些細なことのように思えますが、私が試したどのブラウザ(IE8、Firefox 17)でも一貫して機能しません。javascriptが有効になっていて、それを使用して他のページで正常に機能することを証明できますが、4秒後、これは常にjavascriptが無効になっているように動作し、「nojava.html」ページにリダイレクトされます。なんで?

<html>
<head>
<meta http-equiv="refresh" content="4;url=nojava.html">
<title>Test Page</title>

<script language="JavaScript">
function CheckJava() {
  timerID = setTimeout("after3sec", 3000);
}

function after3sec() {
  window.location="intro1.html";
}
</script>
</head>

<body onload="CheckJava()">
<p>Test text</p>
</body>
</html>

答えに戸惑うことを心から期待しています...

4

2 に答える 2

3

微妙なエラーは、文字列を に渡すと、文字setTimeout列が JavaScript コードとして評価されることです。今、

after3sec

有効な JS コードですが、実際に関数を呼び出すのではなく、指定された関数への参照を返すだけですafter3sec(そして、何もしていないため破棄します)。

これを修正するには、関数名に一対の括弧を追加するだけです:

setTimeout( "after3sec()", 3000 );

または、さらに良いことに、gdoron が提案するようにして、関数参照を直接 に渡しますsetTimeout

setTimeout( after3sec, 3000 );

実際、別の関数をまったく使用せずにそれを行うこともできます。

function CheckJava() {
    timerID = setTimeout( function () {
        window.location = "intro1.html";
    }, 3000 );
}

または、 stringy スタイルを使用して:

function CheckJava() {
    timerID = setTimeout( 'window.location = "intro1.html";', 3000 );
}
于 2013-01-01T19:20:02.157 に答える
2

setTimeoutで文字列を使用したり、関数を使用する前に関数を定義したりしないでください。
への変更:

function after3sec() {
  window.location="intro1.html";
}


function CheckJava() {
  timerID = setTimeout(after3sec, 3000);
}

ところで、javascriptが有効になっているかどうかを確認するためのより良い方法がたくさんありますalert('TEST')

メタリフレッシュの欠点についても読んでください

于 2013-01-01T19:05:43.787 に答える