职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1301|回复: 0

技术:XHTML(可扩展HTML)标准中的CDATA

[复制链接]
那五 发表于 2007-8-13 10:36 | 显示全部楼层 |阅读模式
近来,随着XHTML(可扩展HTML)标准的出现,<script/>标签也经历了一些改变。该标签不再用language特性,而用type特性声明内嵌代码或要加入的外部文件的mime类型,JavaScript的mime类型是\"text/javascript\"。例如:
 <html>
 <head>
 <title>Title of Page</title>
 <script type=”text/javascript”>
 var i = 0;
 </script>
 <script type=”text/javascript” src=”../scripts/external.js”></script>
 </head>
 <body>
 <!-- body goes here -->
 </body>
</html>即使许多浏览器不完全支持XHTML,但大多数开发者现在都用type特性,而不用language特性,以提供更好的XHTML支持。省略language特性不会带来任何问题,因为如前所述,所有浏览器都默认<script/>的该属性值为JavaScript。
XHTML的第二个改变是使用CDATA段。XML中的CDATA段用于声明不应被解析为标签的文本(XHTML也是如此),这样就可以使用特殊字符,如小于(<)、大于(>)、和号(&)和双引号(\"),而不必使用它们的字符实体。考虑下面的代码:
<script type=”text/javascript”>
 function compare(a, b) {
 if (a < b) {
 alert(“A is less than B”);
 } else if (a > b) {
 alert(“A is greater than B”);
 } else {
 alert(“A is equal to B”);
 }
}
</script>这个函数相当简单,它比较数字a和b,然后显示消息说明它们的关系。但是,在XHTML中,这段代码是无效的,因为它使用了三个特殊符号,即小于、大于和双引号。要修正这个问题,必须分别用这三个字符的XML实体<、>和\"替换它们:
<script type=”text/javascript”>
function compare(a, b) {
if (a < b) {
alert(\"A is less than B\");
} else if (a > b) {
131
JavaScript in the Browser
alert(\"A is greater than B\");

} else {
alert(\"A is equal to B\");
}
}
</script>这段代码存在两个问题。首先,开发者不习惯用XML实体编写代码。这使代码很难读懂。其次,在JavaScript中,这种代码实际上将视为有语法错,因为解释程序不知道XML实体的意思。用CDATA段即可以以常规形式(即易读的语法)编写JavaScript代码。正式加入CDATA段的方法如下:
<script type=”text/javascript”>
<![CDATA[
function compare(a, b) {
if (a < b) {
alert(“A is less than B”);
} else if (a > b) {
alert(“A is greater than B”);
} else {
alert(“A is equal to B”);
}
}
]]>
</script>虽然这是正式方式,但还要记住,大多数浏览器都不完全支持XHTML,这就带来主要问题,即这在JavaScript中是个语法错误,因为大多数浏览器还不认识CDATA段。
当前使用的解决方案模仿了“对旧浏览器隐藏”代码的方法。使用单行的JavaScript注释,可在不影响代码语法的情况下嵌入CDATA段:
<script type=”text/javascript”>
//<![CDATA[
function compare(a, b) {
if (a < b) {
alert(“A is less than B”);
} else if (a > b) {
alert(“A is greater than B”);
} else {
alert(“A is equal to B”);
}
}
//]]>
</script>现在,这段代码在不支持XHTML的浏览器中也可运行。
显示被隐藏内容
与type特性一样,随着开发者为浏览器中的XHTML准备更好的支持,CDATA的这种用法也越来越流行。但是,为避免CDATA的问题,最好还是用外部文件引入JavaScript代码。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-4 21:51 , Processed in 0.117020 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表