假如你,像我,決定實(shí)現(xiàn)某些類型的content negotiation和在傳送XHTML的時(shí)候使用正確的媒體類型,你需要知道什么能(和將)在你發(fā)布的文檔中發(fā)生,并且知道怎樣避免問題的發(fā)生。對(duì)于對(duì)content negotiation同進(jìn)行content negotiation的腳本例子有興趣的讀者,我推薦你閱讀Content Negotiation和Serving up XHTML with the correct MIME type(本站早有翻譯:使用正確的MIME類型伺服XHTML)。還有很多這種類型的文章,但這是我讀到的最精彩的兩篇。
樣式和腳本元素是PCDATA(parsed character data,解析字符數(shù)據(jù))塊,不是CDATA(character data,字符數(shù)據(jù))塊。因此,在其內(nèi)看起來像XML的任何東西都會(huì)被當(dāng)作XML來解析,并且會(huì)引發(fā)錯(cuò)誤除非是良構(gòu)的。
在XHTML中使用JavaScript,document.write不會(huì)工作。Ian Hickson在Why document.write() doesn’t work in XML(本站早已翻譯:為什么document.write在XML中不工作)解釋了原因。你需要使用document.createElementNS()代替。關(guān)于更多可以在Experts Exchange中的論壇主題中找到。
這也是Google AdSense不在XHTML中工作的原因之一。那些希望以application/xhtml+xml伺服XHTML并且使用Google廣告的人,這兒有一個(gè)解決辦法:Simon Jessey的 Making AdSense work with XHTML(本站早有翻譯:使Google廣告AdSense在XHTML中工作)。盡管有點(diǎn)麻煩,但還是工作了(我在這里也使用了),同時(shí)被Google所認(rèn)可。 引入樣式元素
在XHTML中,為了兼容定義CSS規(guī)則的XML方法,你應(yīng)該使用XML樣式表聲明(訪問 XHTML 1.0, Second Edition: Referencing Style Elements when serving as XML的XML樣式表聲明和Associating Style Sheets with XML documents的xml-stylesheet處理說明)。要載入外部CSS文件,我們需要使用style元素,同時(shí)應(yīng)該使用XML樣式表聲明來引入樣式元素。為此,使用id屬性給style元素一個(gè)分解的標(biāo)識(shí)符,然后在XML樣式表聲明中引入該標(biāo)識(shí)符:1. ?xml-stylesheet href=”stylesheet1.css” type=”text/css”? 2. ?xml-stylesheet href=”#stylesheet2” type=”text/css”? 3. !DOCTYPE html 4. PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” 5. “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd” 6. html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en” 7. head 8. title XML stylesheet declaration /title 9. style type=”text/css” id=”stylesheet2” 10. @import “stylesheet2.css”; 11. /style 12. /head 我不知道在實(shí)際中究竟有多必要,比且不使用XML樣式表聲明的話會(huì)有什么問題。或許有人會(huì)指點(diǎn)我的。 CSS的應(yīng)用規(guī)則有些不一樣
CSS應(yīng)用到body的性質(zhì)(property)并不應(yīng)用到XHTML的整個(gè)文檔。最值得注意的是應(yīng)用背景顏色或者圖片。在HTML中,應(yīng)用到body元素的背景將會(huì)覆蓋整個(gè)頁面。在XHTML中,你必須同時(shí)樣式化html。在Juicy Studio的 CSS body Element Test中有這個(gè)行為的演示。