1. 程式人生 > >IE11瀏覽器:請不要再叫我IE,謝謝

IE11瀏覽器:請不要再叫我IE,謝謝

微軟在上週剛剛釋出了用於Windows 8.1上的首個Internet Explorer 11的預覽版。我們已經確認Internet Explorer 11中的一些新特性,包括對WebGL的支援、預抓取、預渲染、flexbox、mutation observers以及其他一些Web標準的支援。但是更有趣的是,雖然被叫為Internet Explorer 11,但它已經不再是IE了。

這也是首次微軟真正移除了Internet Explorer的一些特性:更改了user-agent字串,這使得很多判斷瀏覽器是否IE的程式碼無法工作,包括有些JavaScript的isIE()的方法在Internet Explorer 11上執行會返回false。不過好在Internet Explorer 11對Web標準的支援非常好,因此不再需要之前那些IE特定的行為。

在Internet Explorer 11中,user-agent比之前的版本要短很多,而且去掉了最關鍵的MSIE的關鍵字:

上述user-agent你還會注意到增加了Gecko的標識,而Safari是首個標註了Gecko的瀏覽器

之前多數使用MSIE來判斷是否IE瀏覽器的程式碼都無法工作,可以改用Trident字串來判斷。Trident標識是在IE9中引入的。

此外微軟還更改了navigator物件:

• navigator.appName值為“Netscape”

• navigator.product值為“Gecko”

這或許是一項開發者的詭計,但該行為的確是在HTML5中實際指定的。在HTML5中要求這兩個屬性必須返回上述對應的值,這是一個很奇怪的規定的,更奇怪的是Internet Explorer 11遵守了這個規定。

此舉導致一些根據navigator物件判斷瀏覽器型號的JavaScript程式碼會將Internet Explorer 11識別成基於Gecko的瀏覽器。

document.all和friends

從IE 4開始,document.all在IE中舉足輕重。比起document.getElementById()來說,document.all是IE方式的獲取元素的引用的方法。儘管IE 5增加對DOM的支援,但document.all一直沿用至IE 10。而在Internet Explorer 11中終於被廢棄了,這意味著在Internet Explorer 11中使用document.all的方法將可能導致執行失敗,儘管使用了document.all的程式碼實際上還是可以工作。

另外一個要廢棄的是attachEvent()方法,該方法用於新增事件處理器,對應的detachEvent()用來移除事件處理器。這兩個方法將在Internet Explorer 11中刪除。移除這兩個方法需要改用如下邏輯:

當然,建議你優先使用標準的瀏覽器進行測試以確保不會因為attachEvent()的移除而影響程式碼執行。不過網際網路上充斥著各種糟糕的監測程式碼,你只能確保自己的應用經過良好的標準測試。

被刪除的特性還包括:

所有這些被廢棄的方法都有基於標準的替代方法。如果你使用的是標準的方法那恭喜你,可直接支援Internet Explorer 11.

結論

看起來Internet Explorer 11應該是Internet Explorer家族最棒的版本。通過最終移除過去一些魔鬼般的錯誤,微軟正在為大家準備一個真正標準的瀏覽器。

更新:document.all並沒有真正被刪除,但不推薦使用。