引发错误除非是良构的。
为了在script或style块中使用〈、&或者--,你需要用CDATA :
〈script type="text/javascript"〉
〈![CDATA[
...
]]〉
〈/script〉
在CDATA里,你可以任何顺序的字符,它们不会被当作XML来解析(除了结束CDATA部分]]〉)。
需要以text/html发送的文档中,CDATA部分的起始和结束标签需要注释掉,以便在不能处理CDATA部分的浏览器中隐藏:
〈script type="text/javascript"〉
// 〈![CDATA[
...
// ]]〉
〈/script〉
〈style type="text/css"〉
/* 〈![CDATA[ */
...
/* ]]〉 */
〈/style〉
如果要确保很老的浏览器隐藏CDATA部分,需要使用更为复杂的方法,像在Ian Hickson的Sending XHTML as text/html Considered Harmful中描述的那样:
〈script type="text/javascript"〉
〈!--//--〉〈![CDATA[//〉〈!--
...
//--〉〈!]]〉
〈/script〉
〈style type="text/css"〉
〈!--/*--〉〈![CDATA[/*〉〈!--*/
...
/*]]〉*/--〉
〈/style〉
一个更好的办法可能是在发送text/html的文档前使用content negotiation脚本来删除任何CDATA部分。
当然,最聪明和安全的途径是把所有的CSS和JavaScript都移动到外部文件中,但不总是现实的做法。
没有会自动补全的元素
在HTML中,假如表格的tbody元素漏写的话浏览器会自动补全,而XHTML不会。如果你没有清楚地添加tbody,它就不会出现。在编写CSS选择器和JavaScript的时候请铭记在心。
用document.write编写的脚本不再工作
在XHTML中使用JavaScript,document.write不会工作。Ian Hickson在Why document.write() doesn’t work in XML解释了原因。你需要使用document.createElementNS()代替。关于更多可以在Experts Exchange中的论坛主题中找到。
这也是Google AdSense不在XHTML中工作的原因之一。那些希望以application/xhtml+xml伺服XHTML并且使用Google广告的人,这儿有一个解决办法:Simon Jessey的Making AdSense work with XHTML。尽管有点麻烦,但还是工作了(我在这里也使用了),同时被Google所认可。
引入样式元素
在XHTML中,为了兼容定义CSS规则的XML方法,你应该使用XML样式表声明(访问 XHTML 1.0, Second Edition: Referencing Style Elements when serving as XML的XML样式表声明和Associating Style Sheets with XML documents的xml-stylesheet处理说明)。要载入外部CSS文件,我们需要使用style元素,同时应该使用XML样式表声明来引入样式元素。为此,使用id属性给style元素一个分解的标识符,然后在XML样式表声明中引入该标识符:
〈?xml-stylesheet href=”stylesheet1.css” type=”text/css”?〉
〈?xml-stylesheet href=”#stylesheet2” type=”text/css”?〉
〈!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〉
〈title〉XML stylesheet declaration〈/title〉
〈style type=”text/css” id=”stylesheet2”〉
@import “stylesheet2.css”;
〈/style〉
〈/head〉
我不知道在实际中究竟有多必要,并且不使用XML样式表声明的话会有什么问题。或许有人会指点我的。
CSS的应用规则有些不一样
CSS应用到body的性质(property)并不应用到XHTML的整个文档。最值得注意的是应用背景颜色或者图片。在HTML中,应用到body元素的背景将会覆盖整个页面。在XHTML中,你必须同时样式化html。在Juicy Studio的CSS body Element Test中有这个行为的演示。
在XHTML中作为CSS规则的元素和属性名字是大小写敏感的(而且必须是小写的)。避免问题最简单的办法是,不管在HTML,XHTML还是CSS中所有东西都保持小写。
有挑战,但不是不可能
当我开始为兼容的浏览器伺服XHTML为applica
上一页 [1] [2] [3] 下一页