考虑以下html文档:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
alert("Hello")
</script>
</head>
</html>
Firefox,Safari和Chrome中打开的结果在我的macbook中是相同的:警报消息显示“Hello”。我正在阅读this回答以尝试了解浏览器的行为。主要部分是:
由于标签的内容被视为CDATA,因此不会解析内容,您可以在内容中存储未加引号的XML或HTML(只要您不在内容中放置
</script>
标记,因为这会关闭你的元素。)
让我们尝试一下当我们在Firefox中看到源代码时会发生什么:
它显示的浏览器输出为")
,因为它认为脚本标记已关闭
内部警报。如果我们确实想要显示"</script>"
,那么解决此问题的一种方法是:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
alert("<"+"/script>")
</script>
</head>
</html>
现在Firefox了解它:
解析器检查</script>
是否为结束部分非常简单。它确实需要更多
是时候检查一下但它是可行的(在</script>
遇到之前计算引号数。如果是偶数那么它是结束标记,否则继续寻找结束标记)。问题是,这是一条规则,我们不能在javascript中写"</script>"
吗?如果是这样,我可能没有注意到哪些其他微妙的规则?
同样适用于php解析器。 <?php echo "?>" ?>
。我测试了这个,php似乎知道真正的?>
所在的位置。
答案 0 :(得分:4)
正确,您无法在内嵌 Javascript中编写"</script>"
,但您可以编写"<\/script>"
。在外部Javascript文件中,您没有此限制。
Javascript引擎会将"</script>"
视为脚本的结尾,,无论其出现何种上下文。
只要您使用的是HTML而不是XHTML,那就是唯一真正的问题。
XHTML,作为XHTML文件 [1]还有一些问题,包括--
作为XHTML
评论的开头和结尾。
[1]很少有XHTML内容实际上是XHTML。它通常用作HTML,然后由标签汤解析器处理,而不是从嵌入的HTML注释甚至不属于的CDATA
标签中理解所有内容。