IE7 :: SCRIPT1014:字符无效

时间:2013-01-24 00:09:06

标签: javascript html internet-explorer-7

我有一个我最近更改的网页,除了IE7之外,在所有浏览器上都能很好用。在IE7上,我看到以下内容:

  

SCRIPT1014:无效的字符blah.html,第1行第1个字符

截图:

enter image description here

我已多次查看代码并且没有任何内容。我知道它是一个javascript错误,但我无法确定在哪里。

令人沮丧的部分不知道在哪里看(第1行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字符串的特定行和字符编号。