探秘IE8 JavaScript功能超乎想象
IE 7在CSS編程方面的改進(jìn)給很多開(kāi)發(fā)者帶來(lái)了耳目一新的感覺(jué),但是在JavaScript方面的表現(xiàn)卻不敢恭維,實(shí)際上,在這方面我們看到的只是一些新的BUG。不過(guò)幸運(yùn)是,微軟已經(jīng)看到了這一點(diǎn),在IE 8中,JavaScript已經(jīng)成為其開(kāi)發(fā)的一個(gè)重點(diǎn),下面我們就一起從開(kāi)發(fā)者角度來(lái)看一下IE 8的一些特點(diǎn)。
51CTO推薦閱讀:Firefox和IE之間7個(gè)JavaScript差異
W3C:querySelector
IE8開(kāi)始支持一些新的W3C規(guī)格,其中多了querySelector和querySelectorAll兩個(gè)函數(shù)。querySelector是CSS selector的查找原理的一種快速實(shí)現(xiàn)方法。IE 8是第二個(gè)實(shí)現(xiàn)Selectors API的瀏覽器(另一個(gè)瀏覽器是WebKit)。簡(jiǎn)單來(lái)說(shuō),它實(shí)現(xiàn)的就是jQuery里令人驚艷的CSS Selector功能。例如以下的范例:(只有IE8可以跑,F(xiàn)F、IE7都會(huì)發(fā)生錯(cuò)誤)。
- <html>
- <body>
- <div><div><span>InnerSpan</span></div></div>
- <div><span class="myClass">ClassSpan</span></div>
- <script type="text/javascript">
- .innerHTML);
- .innerHTML);
- </script>
- </body>
- </html>
這兒需要特別指出的是,任何Selectors要完全依靠瀏覽器的原生selector實(shí)現(xiàn)。IE8支持CSS2.1,因此開(kāi)發(fā)者無(wú)需再等待CSS 3 selectors的推出。
支持更多HTML 5功能
我一直希望在IE 8中增加一些HTML 5兼容功能,在IE 8中我們看到了4個(gè)在這方面的完整功能,非常棒!
1、HTML 5: window.location.hash
這個(gè)功能已經(jīng)被多數(shù)瀏覽器支持的非常好。在IE8標(biāo)準(zhǔn)模式中將window.location.hash中的更改作為導(dǎo)航,并保存先前文檔的URL,可以像在Ajax應(yīng)用中模仿“后退”按鈕效果。IE8中對(duì)它進(jìn)行了改良,可以廣播這個(gè)hashchanged時(shí)間,據(jù)我所知這是***個(gè)采取這種處理方法的瀏覽器。
2、HTML 5: DOM存儲(chǔ)
通過(guò)這個(gè)功能,數(shù)據(jù)可以持續(xù)保存在本地,它將取代原始的cookie存儲(chǔ)機(jī)制。我們已經(jīng)在2.0版本以后的Firefox瀏覽器中看到過(guò)這個(gè)功能,但是在Opera和Safari中尚未支持此功能。
3、HTML 5: postMessage
IE8現(xiàn)在支持跨文件消息通訊(Cross-Document Messaging-XDM)!通過(guò)onmessage事件和postMessage方法,兩個(gè)來(lái)自不同域的網(wǎng)頁(yè)可以進(jìn)行通訊。目前IE 8、Opera 9、Firefox 3和WebKit nightlies版均支持這個(gè)功能,也就是說(shuō),該功能幾乎已被所有***瀏覽器支持。
4、HTML 5: Offline Events
在IE 8中擁有一些離線事件來(lái)檢測(cè)網(wǎng)絡(luò)的中斷,通過(guò)它我們可以編寫(xiě)精彩的離線Ajax應(yīng)用。目前來(lái)看支持這一功能的瀏覽器包括Firefox 3和IE 8。
IE8引入XDomainRequest跨站數(shù)據(jù)獲取功能
這是一個(gè)非常有趣的進(jìn)行跨站數(shù)據(jù)獲取的功能,不過(guò)它與Firefox 3中的跨站 XMLHttpRequest的工作原理不太一樣。它的跨域并不是無(wú)限制的。需要服務(wù)端返回http header中帶有XDomainRequestAllowed=1才可以跨域,否則是不成功的。
XMLRequest 不能跨站一直都是多子域服務(wù)器的硬傷。使得很多情況不得不考慮最原始的動(dòng)態(tài)script和JSON的方式。不過(guò)IE8團(tuán)隊(duì)有意解決跨站訪問(wèn)數(shù)據(jù)的問(wèn)題,這是IE8的一個(gè)進(jìn)步。另外,IE8下的XMLHttpRequest增加了一個(gè)很重要的屬性 timeout和ontimeout方法,它在對(duì)程序進(jìn)行優(yōu)化時(shí)極其重要。
DOM漏洞修補(bǔ)
在IE 8中g(shù)etAttribute/setAttribute已經(jīng)進(jìn)行了重大改進(jìn)。簡(jiǎn)單來(lái)說(shuō),它們現(xiàn)在已經(jīng)可以完成屬于自己的任務(wù),IE8和和其它瀏覽器在這方面的差距已經(jīng)不大。臭名昭著的accessing relative/absolute href/src屬性問(wèn)題也已經(jīng)得到解決,這是一個(gè)很大的進(jìn)步。另外它們還增加了hasAttribute功能。
其它新增和修復(fù)包括:
◆.ownerElement和.ownerDocument。我們現(xiàn)在終于有了一個(gè)統(tǒng)一的方法來(lái)處理子框架。
◆getElementById可以通過(guò)id來(lái)返回對(duì)象。這是一個(gè)我們期盼已久的功能。
◆getAttribute("checked") 現(xiàn)在返回“checked”而不是true。
◆動(dòng)態(tài)創(chuàng)建(或修改)的單選按鈕現(xiàn)在可以被選擇了。
對(duì)于這些修復(fù)我感到即高興又生氣,高興的是微軟終于對(duì)它們做出了正確的修改,生氣的則是微軟花了這么長(zhǎng)時(shí)間才做出正確的修改。
W3C:事件
這個(gè)功能是IE 8目前版本完全缺失的一個(gè)部分。我們依然需要繼續(xù)使用IE的attachEvent系統(tǒng),還看不到addEventListener的到來(lái)。我不確認(rèn)這個(gè)功能的缺失對(duì)于IE 8的Acid3支持將帶來(lái)多大的影響,不過(guò)在Acid3中已經(jīng)包含了對(duì)addEventListener的測(cè)試,因此微軟可能已經(jīng)開(kāi)始考慮增加對(duì)它的支持。
從某種程度上我可以理解微軟希望保留自己現(xiàn)有API的心情,但是我不能理解它們?yōu)槭裁礇](méi)有興趣也增加對(duì)addEventListener的支持。我猜測(cè)理由可能是微軟不得不支持像事件捕獲之類(lèi)的概念。對(duì)于這一點(diǎn)我感到非常失望。我認(rèn)為這是下一個(gè)版本中急需修正的一個(gè)地方。
JavaScript語(yǔ)言
在完善垃圾收集、內(nèi)存管理和性能等問(wèn)題上,IE團(tuán)隊(duì)已經(jīng)進(jìn)行了一些重大的改進(jìn),這些改進(jìn)對(duì)我們很多應(yīng)用的開(kāi)發(fā)都意義重大。
盡管如此,我還是要糾正一點(diǎn)。盡管IE8對(duì)于JavaScript開(kāi)發(fā)者來(lái)說(shuō)是非常偉大的一個(gè)瀏覽器,但如果更準(zhǔn)確的說(shuō),高興的或許只是“JavaScript+DOM”開(kāi)發(fā)者。單就JavaScript來(lái)說(shuō),IE 8卻比較令人失望:在這個(gè)版本的瀏覽器中并沒(méi)有出現(xiàn)任何新的純正JavaScript功能。我只能寄望于在下一個(gè)版本中增加更多的改進(jìn)了。
ARIA支持
這是一個(gè)讓我感到非常滿意的變化。ARIA是一個(gè)非常了不起的規(guī)范,可以讓W(xué)eb應(yīng)用有能力與讀者進(jìn)行清晰的交流。在此之前IE缺乏對(duì)它的支持,不過(guò)現(xiàn)在這一缺陷已經(jīng)在IE 8中得到彌補(bǔ)。目前Firefox、IE和Opera已經(jīng)都支持ARIA。WebKit團(tuán)隊(duì)似乎還沒(méi)有興趣支持這一功能,實(shí)在是令人感到不可理解。
嵌入式SVG
目前在IE 8已經(jīng)增加了對(duì)嵌入式命名元素的支持。這意味著你可以對(duì)SVG和Methyl進(jìn)行內(nèi)聯(lián)標(biāo)記,從這一點(diǎn)上來(lái)看,IE瀏覽器將來(lái)有望增加對(duì)SVG的原生支持。
IE Web Developer:IE版的Firebug
在IE瀏覽器中我們終于看到了這個(gè)類(lèi)似Firebug的工具,用Firebug創(chuàng)建者Joe Hewitt的原話來(lái)說(shuō):“我非常高興微軟在IE8中完全復(fù)制了Firebug的功能。”我不得不承認(rèn),類(lèi)似的工具已經(jīng)存在了很長(zhǎng)時(shí)間,而且深受開(kāi)發(fā)者歡迎。
IE Web Developer可以讓你檢查和編輯你的HTML DOM,顯示錯(cuò)誤信息、日志信息,顯示網(wǎng)站源代碼,監(jiān)視DHTML事件和HTTP流量。
瀏覽模式切換
乍一看,由于這個(gè)功能的存在,你可以看一下你的IE 7網(wǎng)頁(yè)是否能在IE 8中顯示,實(shí)際上它的真正用途在于,開(kāi)發(fā)者可以開(kāi)發(fā)一個(gè)標(biāo)準(zhǔn)兼容的網(wǎng)頁(yè)(IE8、Firefox、Safari和Opera),然后查看在IE 7中的顯示效果。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),這是一個(gè)非常有用的功能,因?yàn)槲覀儫o(wú)需再借助于虛擬機(jī)中的其它版本IE瀏覽器來(lái)測(cè)試網(wǎng)頁(yè)效果。
Bug回饋
IE團(tuán)隊(duì)從測(cè)試者那兒收集反饋信息,然后將漏洞發(fā)布到一個(gè)公開(kāi)訪問(wèn)的網(wǎng)站上。這是微軟非常明智的一個(gè)進(jìn)步。用戶可以從這兒看到微軟對(duì)漏洞的改進(jìn)信息。
結(jié)論
總體來(lái)說(shuō),盡管IE8也有自己的缺點(diǎn),我還是對(duì)這個(gè)新版IE瀏覽器持肯定看法。類(lèi)似querySelector、ARIA和postMessage等功能對(duì)開(kāi)發(fā)者都非常有幫助。對(duì)于那些不足之處,例如沒(méi)有新的JavaScript功能,沒(méi)有W3C事件支持,沒(méi)有CSS3 Selectors,我認(rèn)為將在未來(lái)的版本中會(huì)有所改進(jìn)。
【編輯推薦】