1

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

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

截屏:

在此处输入图像描述

我已经多次审查了代码,没有任何突出之处。我知道它是一个 javascript 错误,但我无法确定在哪里。

令人沮丧的部分是不知道在哪里看(第 1 行字符 1)并且错误很模糊。

4

1 回答 1

3

简而言之,错误

问题是调用window.setTimeout.

更多详情

in 中的字符串window.setTimeout([string], [int])作为 eval 执行,因此在执行期间导致了 javascript 错误,对我来说恰好是在 window onload 事件期间。

为什么错误说“无效字符”?

因为我使用 a#而不是 a$来启动 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 命令使用了 a#而不是 a 。$这实际上是遗留代码,所以我将它重构为调用特定函数而不是在字符串 ( evil ) 上调用 eval 所以它现在看起来更像:

window.setTimeout(function(){
      $('#sdfl');
   }, 1000);

请注意,通过此更改,查找原始错误会容易得多,因为它会给出与页面相关的特定行和字符编号,而不是 eval 字符串。

于 2013-01-24T00:09:06.337 回答