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