我有一个我最近更改的网页,除了IE7之外,在所有浏览器上都能很好用。在IE7上,我看到以下内容:
SCRIPT1014:无效的字符blah.html,第1行第1个字符
截图:
我已多次查看代码并且没有任何内容。我知道它是一个javascript错误,但我无法确定在哪里。
令人沮丧的部分不知道在哪里看(第1行1),错误是模糊的。
答案 0 :(得分:3)
问题是调用window.setTimeout
时字符串中的javascript错误。
window.setTimeout([string], [int])
中的字符串作为eval执行,因此在执行期间导致javascript错误,这对我来说恰好是在窗口onload事件期间。
为什么错误说“无效字符”?
因为我使用#
而不是$
来启动jquery命令。 javascript编译器不知道如何处理#
因此它引发了错误。
为什么错误报告在第1行的字符1上?
由于window.setTimeout
中的字符串作为eval执行,因此错误报告在第1行的字符1上 - 这最终有意义!
示例html以复制问题
以下是我创建的展示问题的示例页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test Page</title>
<script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
</head>
<body>
<h1>Test Page</h1>
<script type="text/javascript">
$(document).ready(function(){
window.setTimeout("#('#sdfl');", 1000);
});
</script>
</body>
</html>
我在eval字符串中意外地使用了#
而不是$
来获取jquery命令。这实际上是遗留代码,因此我重构它来调用特定函数而不是调用字符串上的eval( evil ),所以它现在看起来更像:
window.setTimeout(function(){
$('#sdfl');
}, 1000);
请注意,通过此更改,找到原始错误会更容易,因为它会给出相对于页面而不是eval字符串的特定行和字符编号。