1. 程式人生 > >Internet Explorer 11:不要再叫我IE

Internet Explorer 11:不要再叫我IE

上週,Internet Explorer 11搭載Windows 8.1預覽版而來,相信很多瀏覽迷也已經在使用中。Internet Explorer 11 Preview 改進了與 Web 標準、其他瀏覽器和實際網站的相容性。 更新了對常用 Web 標準的支援並添加了可防止較早版本的網站錯誤顯示的更改。

在這些所有的改進中最明顯的一個改進就是 User-agent 字串的更改。此項更改的最大目的就是針對一些舊的網站,通過新的User-agent 字串來實現不再跳轉到專為IE8、IE7、IE6等舊版本準備的頁面中。

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)

IE10瀏覽器的User-agent

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

IE11瀏覽器的User-agent

如果將新的 user-agent 字串與較早版本的 Internet Explorer 報告的字串進行比較,你會發現以下更改:

  • 相容 (“相容”) 和瀏覽器 (“MSIE”) 令牌已刪除。
  • “like Gecko” 令牌已新增(以便與其他瀏覽器一致)。
  • 瀏覽器版本現在由新版本 (“rv”) 令牌報告。

此外,Internet Explorer 11還對一些舊的 API 進行了新增、更改和刪除,此舉是因為許多網站查詢支援舊 (HTML4) 功能的瀏覽器,目的是提供針對早期瀏覽器優化的體驗。 這就意味著一旦網站在搜尋現行標準支援之前檢測到舊功能,伺服器則會相應的返回老版的的相容性頁面,因此對IE11來說就無法展現對現行標準(如 HTML5、CSS3 等)的良好支援。

因此,IE11 Preview 新增、更改、刪除了許多預設的舊功能:

  • navigator.appName 屬性現在會返回 “Netscape” 以反映 HTML5 標準和匹配其他瀏覽器的行為。
  • navigator.product 屬性現在會返回 “Gecko” 以便反映 HTML5 標準和匹配其他瀏覽器的行為。
  • XDomainRequest 物件被 XMLHttpRequest 的 ORS 替換。
  • 已新增對 __proto__ 的支援。
  • 已新增 dataset 屬性。

另外,為了支援現行標準指定的功能,已刪除若干舊 API 功能:

 

 

刪除 API 功能 替代功能
attachEvent addEventListener
window.execScript eval
window.doScroll window.scrollLeft、window.scrollTop
document.all document.getElementById
document.fileSize、img.fileSize 使用 XMLHttpRequest 可提取源。
script.onreadystatechange 和 script.readyState script.onload
document.selection window.getSelection
document.createStyleSheet document.createElement(“style”)
style.styleSheet style.sheet
window.createPopup 使用 div 或 iframe(zIndex 值很高)
二進位制行為 變化;使用基於標準的等效,如 canvas、SVG 或 CSS3 動畫
舊資料繫結 使用框架提供的資料繫結,如 WinJS

 

 

這些更改在某種程度上可阻止某些 user-agent 檢測機制錯誤地將 Internet Explorer 標識為較早版本, 盡顯Internet Explorer 作為一款現代瀏覽器的網路之美。

換句話來說,這些改變就是Internet Explorer 11對網站說:“請不要再叫我IE,我是一款支援最新標準的現代瀏覽器!”