Mik*_*rov 4 html javascript cdata
我试图在每个浏览器中运行以下HTML:Opera,FF,IE,Chrome
<!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>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8">
</head>
<body>
<script>
<![CDATA[
alert('Hey!');
]]>
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
他们都没有显示警报.Chrome在控制台中记录错误:Uncaught SyntaxError:Unexpected token <.似乎在CDATA宣言中抱怨拳头.Firefox还会记录"语法错误"
w3schools指出这是使用CDATA的方式http://www.w3schools.com/xml/xml_cdata.asp.本网站的其他答案表明了这一点.我究竟做错了什么?我尝试使用命名空间和doctypes,但这并没有改变任何东西.
编辑:我添加了XHTML名称空间和doctype,我最初删除了,问题仍然存在.
区别在于HTML和XHTML.W3Schools是正确的,它是XHTML中的有效CDATA构造,但是由于你的问题表明你的代码是HTML而且HTML中没有CDATA这样的东西<script>,你的例子在解释器看到"<"时就会失败.您可以告诉浏览器它正在查看XHTML,但是处理HTML也可能更安全.为此,您需要在JavaScript注释中隐藏CDATA.(您可能还会考虑识别您的<script>块中的哪种语言.)
<html>
<head>
</head>
<body>
<script>
//<![CDATA[
alert('Hey!');
//]]>
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
事实上,这是万维网联盟(W3C)在XHTML媒体类型A.4中推荐的方法.嵌入式样式表和脚本.
相关问题 脚本标记中何时需要CDATA部分?解释了在XHTML文档中嵌入脚本时建议使用CDATA部分.但是,仅将XHTML doctype设置为测试文档是不够的.CDATA仍被视为语法错误.
根据这篇博文,这是因为内容类型需要与doctype定义相匹配.正确的XHTML需要Content-type设置以下标头:
Content-type: application/xhtml+xml
Run Code Online (Sandbox Code Playgroud)
如果没有指定并text/html发送,浏览器将恢复为HTML.事实上,如果我将这个标题添加到我的测试用例中,浏览器会开始正确解析CDATA中的JavaScript,即使CDATA没有被注释掉.
这对我有用(使用PHP设置标题):
<?php header("Content-type: application/xhtml+xml");
echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<!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><![CDATA[alert('Hey!');]]></script>
</head>
<body>
</body>
</html>?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10759 次 |
| 最近记录: |