Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome中出现了非常奇怪的小故障-解析字符串的内容!_Javascript_Html_Google Chrome_Html Parsing - Fatal编程技术网

Javascript Chrome中出现了非常奇怪的小故障-解析字符串的内容!

Javascript Chrome中出现了非常奇怪的小故障-解析字符串的内容!,javascript,html,google-chrome,html-parsing,Javascript,Html,Google Chrome,Html Parsing,好的-这是我最近看到的最愚蠢的故障: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <script type='text/ja

好的-这是我最近看到的最愚蠢的故障:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type='text/javascript'>

var data = "</script>";

</script>
</head>
<body>

This should break!

</body>
</html>

var数据=”;
这应该打破!
这会导致语法错误,因为JavaScript解析器实际上正在读取字符串的内容。多么愚蠢

如何将
放入代码中。有办法吗

这种行为是否有合理的原因?

在X(HT)ML(when)中,正是出于这个原因,脚本需要作为CDATA转义

在XHTML中,脚本和样式元素被声明为具有#PCDATA内容。因此,

如果您的XHTML文档只是作为text/html,并被视为标记汤,则这不适用,您只需像
'

这样“转义”字符串:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type='text/javascript'>
<!--
var data = "</script>";
-->
</script>
</head>
<body>
This should break!
</body>
</html>

这应该打破!

原因很简单,HTML是在执行javascript之前解析的,
使解析器忽略本节中出现的所有标记。

这不是一个小故障-这是正常的预期行为,如果您仔细想想,这是正确的。HTML规范没有定义脚本语言,因此引擎应该看到的是纯文本,直到关闭标记。除了已经列出的选项外,还有两个选项:

// escape the / character, changing the format of the "closing" tag
var data = "<\/script>"; 

// break up the string
var data = "</"+"script>";
//转义/字符,更改“closing”标记的格式
var数据=”;
//拆线
var数据=”;
第一种方法之所以有效,是因为HTML不使用
\
进行转义,而是将其视为文字字符,当然
不是有效的结束标记。第二个脚本之所以有效,原因更为明显,但这里有人告诉我不应该使用它(我也不太明白为什么)。如果你相信的话,脚本内容


在第一个ETAGO结束("转义有什么问题?不仅仅是Chrome。我在Windows 7上的Firefox 3.6上测试了它,它也给出了同样不正确的结果。转义?就像
/script
?也不起作用。@Xavier Ho:结果是正确的,期望是错误的。那么期望是什么呢?重点是HTML没有定义单独的它解析字符串的脚本类型以及字符串中的HTML标记无效。当它看到
时,它只会查找
-它不关心脚本中的字符串是什么。CDATA…哦,是的。我忘记了。我总是用ActionScript来做。忘记了你可以用JavaScript来做…:)啊。我明白了。哦,好吧。你提出的另一个解决方案似乎行得通,第二个似乎行得通。我不知道为什么我也不使用它。@George:不管怎样,第一个对我来说更可取,只是觉得把两个字符串文本分开是不对的;-)如果脚本包含字符串中的
“-->”
,该怎么办?;-)
// escape the / character, changing the format of the "closing" tag
var data = "<\/script>"; 

// break up the string
var data = "</"+"script>";
var data = "<\/script>";