Web開發(fā)是非常困難的。現(xiàn)在的主流瀏覽器種類繁多,各種配置數(shù)以百萬(wàn)計(jì),而且數(shù)量還在不斷增加,再加上超過(guò)10億的Internet用戶,已經(jīng)從整體上對(duì)Web開發(fā)過(guò)程進(jìn)行了重新定義。Web開發(fā)人員和瀏覽器供應(yīng)商已經(jīng)嘗試用現(xiàn)代化的標(biāo)準(zhǔn)(HTML 4.01,HTML 5,CSS 2.1和CSS 3)來(lái)駕馭這些混亂。與先前版本相比,IE 8為那些被廣泛采用的Web標(biāo)準(zhǔn)提供了更好的支持,在很多(但非全部)情況下,使開發(fā)人員能夠編寫出可以在多種瀏覽器中正常工作的頁(yè)面。這一章將介紹這些標(biāo)準(zhǔn)以及IE中的互操作性改進(jìn)、詳細(xì)的兼容性功能,還將介紹一些方法,用于處理標(biāo)準(zhǔn)與兼容性之間經(jīng)常存在的沖突。
2.1 標(biāo)準(zhǔn)支持與互操作性
IE開發(fā)人員在整個(gè)IE 8發(fā)布周期中所表達(dá)的“默認(rèn)標(biāo)準(zhǔn)”哲學(xué)指向了一個(gè)新的產(chǎn)品目標(biāo)——對(duì)更大范圍的標(biāo)準(zhǔn)提供支持。IE 8非常引人注目地提供了對(duì)CSS 2.1規(guī)范的全面支持,并對(duì)HTML 5規(guī)范中一些比較穩(wěn)定的新功能提供了支持。本節(jié)重點(diǎn)介紹了IE 8相對(duì)于IE 7所做的改進(jìn),并為那些尋求創(chuàng)建互操作性Web應(yīng)用程序的開發(fā)人員提供了一個(gè)支持基礎(chǔ)。
HTML 4.01,HTML 5和DOM規(guī)范支持改進(jìn)
IE 8在對(duì)HTML 4.0標(biāo)準(zhǔn)的支持方面進(jìn)行了大量改進(jìn);在當(dāng)今的Web世界中,HTML 4.0是應(yīng)用最多、最受認(rèn)可的文檔標(biāo)記語(yǔ)言。IE 8以IE 7為基礎(chǔ),在實(shí)現(xiàn)IE 4.01規(guī)范方面進(jìn)行了以下增強(qiáng)與改進(jìn)內(nèi)容:
● <p>元素結(jié)束:只要段落元素(<p>)結(jié)束標(biāo)記之前出現(xiàn)以下標(biāo)記之一,或者根本就沒(méi)有出現(xiàn)它的結(jié)束標(biāo)記,就會(huì)自動(dòng)關(guān)閉該元素:<table>,<form>,<noframes>和<noscript>。
● <object>回退:當(dāng)IE不能從一個(gè)<object>標(biāo)簽中加載資源時(shí),IE將顯示該標(biāo)記中包含的內(nèi)容,以進(jìn)行“回退”。
● <object>作為圖像:當(dāng)IE遇到一個(gè)引用圖像資源的<object>標(biāo)記時(shí),它會(huì)呈現(xiàn)該圖像,就像這個(gè)圖像是嵌入在<img>標(biāo)記中一樣。在過(guò)去的版本中,IE將通過(guò)這個(gè)標(biāo)記來(lái)顯示圖像資源,但不能恰當(dāng)?shù)卣{(diào)整大小,也不提供邊框,在某些情況下會(huì)顯示滾動(dòng)條。
來(lái)自W3C的HTML 5和各種DOM規(guī)范為Web開發(fā)人員提供了非常豐富的工具和事件,用以增強(qiáng)網(wǎng)頁(yè)和提高生產(chǎn)效率。IE 8實(shí)現(xiàn)了這些規(guī)范中的一些組成部分(這些部分已經(jīng)在其他瀏覽器中得到了實(shí)現(xiàn)):
● Ajax哈希導(dǎo)航:基于哈希的頁(yè)導(dǎo)航(在這種情況下,URL中僅段組件發(fā)生變化)現(xiàn)在被存儲(chǔ)為導(dǎo)航事件。也就是說(shuō),用戶可以使用后退和前進(jìn)按鈕在一個(gè)Ajax應(yīng)用程序的狀態(tài)之間進(jìn)行“導(dǎo)航”。這其中包含了對(duì)onhashchange DOM事件的支持。
● DOM存儲(chǔ):Web應(yīng)用程序可以訪問(wèn)新的存儲(chǔ)對(duì)象,將數(shù)據(jù)和設(shè)置持久存儲(chǔ)在用戶的計(jì)算機(jī)上。window.sessionStorage和window.localStorage對(duì)象可以為這一數(shù)據(jù)應(yīng)用提供高達(dá)10MB的本地存儲(chǔ)空間。
● 跨文檔發(fā)送消息:這一增強(qiáng)功能為瀏覽器窗口中基于<iframe>的文檔引入了一種新的通信結(jié)構(gòu),即使這些文檔來(lái)自不同域時(shí)也能使用。這些文檔現(xiàn)在可以使用postMessage API,以確??缥臋n數(shù)據(jù)傳輸經(jīng)過(guò)了雙方同意,從而為用戶提供了額外保護(hù)。
● 聯(lián)機(jī)/脫機(jī)事件:現(xiàn)在可以使用onoffline和ononline事件來(lái)檢測(cè)網(wǎng)絡(luò)連接的丟失與恢復(fù)。將流行的Ajax技術(shù)與DOM存儲(chǔ)相結(jié)合,應(yīng)用程序即使在脫機(jī)狀態(tài)下也能正常工作。
● CSS 2.1和CSS 3支持改進(jìn)。
IE 8對(duì)CSS 2.1規(guī)范提供了全面支持,這一標(biāo)準(zhǔn)被廣泛用于定義文檔樣式、構(gòu)建豐富的Web用戶界面。表2-1描述了自IE 7支持CSS 2.1以來(lái)所更改或添加的屬性。