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').

另请阅读有关Meta refresh 的缺点

于 2013-01-01T19:05:43.787 回答