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,我是一款支援最新標準的現代瀏覽器!”