58

我正在尝试调试在 Firefox 扩展中读取并执行的 JavaScript 脚本。我只能通过 Firebug 控制台看到错误(我的代码对 Firebug 不可见),并且它报告“未终止的字符串文字”。

我检查了这条线和它周围的线,一切似乎都很好——括号、大括号和引号是平衡的,等等。我应该寻找哪些其他可能的原因?

4

19 回答 19

72

大多数浏览器似乎都有这样的代码问题:

var foo = "</script>";

在 Firefox、Opera 和 IE8 中,这会导致未终止的字符串文字错误。在序列化包含脚本的 html 代码时可能会非常讨厌。

于 2009-09-03T12:32:02.890 回答
59

寻找换行符!这些往往是原因。

于 2008-12-23T07:39:52.373 回答
26

如果我有“声誉”,我会投票给 jamtoday 的答案

如果您的数据来自 PHP,这可能会有所帮助

$str = str_replace(array("\r", "\n"), '', $str);
于 2011-05-07T02:59:23.470 回答
21

我刚刚发现这"<\/script>"似乎和"</scr"+"ipt>".

于 2011-09-14T18:02:08.490 回答
12

只需转义标签闭包或使用 ascii 代码

IE

<\/script>

IE

<&#47;script>
于 2011-12-30T21:51:44.373 回答
8

您可以尝试通过JSLint运行脚本。

于 2008-10-22T21:30:35.797 回答
5

查找一个字符串,其中包含可能由某些服务器端代码插入的未转义的单个 qoute。

于 2008-10-22T21:13:08.657 回答
4

如果您已经完成了任何剪切/粘贴操作:一些在线语法荧光笔会破坏单引号和双引号,将它们转换为格式化的引号对(匹配的开始和结束对)。(虽然我现在找不到任何例子)......所以这需要点击 Command-+ 几次并盯着你的引号字符

尝试不同的字体? 此外,不同的编辑器和 IDE 使用不同的标记器和突出显示规则,而 JS 是一种更动态的解析语言,因此请尝试在 emacs、vim、gedit(使用 JS 插件)中打开文件...如果幸运的话,其中之一它们将显示一条贯穿文件末尾的长紫色字符串。

于 2008-10-23T16:01:01.330 回答
2

你有没有逃脱你的正斜杠( / )?我以前遇到过这些问题

于 2008-12-23T10:34:26.293 回答
2

过去,我在使用带角度的引号 ( ' ) 时遇到了麻烦,通常是从 Word 复制和粘贴。用常规单引号 ( ' ) 替换它们就可以了。

于 2010-05-27T16:57:22.773 回答
2

也许是因为您的 PHP 代码中有换行符。如果您在警报窗口消息中需要换行符,请将其作为转义语法包含在 PHP 代码中每一行的末尾。我通常通过以下方式进行操作:

$message = 'line 1.\\n';
$message .= 'line 2.';
于 2010-12-02T12:13:03.197 回答
2

另外,请记住 %0A 是编码的换行符 URL。我花了一段时间才找到我的违规代码中的换行符。

于 2011-07-08T12:52:38.610 回答
2

如果没有任何帮助,请寻找一些 uni-code 字符,例如

\u2028

这可能会在多行上破坏您的字符串并引发此错误

于 2012-03-13T16:34:47.013 回答
1

你试过Chromebug吗?这是用于扩展的 Firebug。

于 2010-03-31T14:33:18.997 回答
0

尝试“二分查找”。删除一半代码,然后重试。如果错误仍然存​​在,请删除剩余代码的一半。如果错误不存在,请将您删除的内容放回原处,然后删除其中的一半。重复。

您应该能够相当快地将其缩小到几行。我的经验是,在这一点上,你会注意到一些愚蠢的畸形字符串。

如果您不确定错误出现在哪个服务器端资源中,那么在保存到浏览器的 HTML 输出版本上执行此操作可能会很方便。

于 2008-10-23T01:03:21.220 回答
0

网页开发人员猜错了查看者的浏览器使用哪种编码。这通常可以通过在页面标题中指定编码来解决。

于 2008-10-23T01:26:10.347 回答
0

扫描错误消息提到的#行之前的代码。任何未终止的内容都会导致下游的某些内容(被指责的行#)被标记。

于 2008-10-23T16:32:19.923 回答
0

空格是我发现的另一个问题,会导致此错误。使用函数修剪空白可能会有所帮助。

于 2010-03-31T14:05:50.650 回答
-2
str = str_replace(array("\r\n","\n\r","\r", "\n"), '<br />', stripslashes($str));

这应该有效。

于 2012-12-19T07:39:36.357 回答