每當我接到**或者是pm和我說:「那個***版型怎麼跑掉了」或者說:「那個***的頁面連線(ajax 連線)怎麼點下去頁面只顯示圖和文字而其他部份都不見了」?
通常我會問兩個問題:你是不是用ie?請問你的ie版本是多少?
通常來說,對方都是使用ie,而如果使用的是ie7,我只能在心理吶喊:「天哪、拜託可不可以公升級或換瀏覽器啊」然後用客氣的口吻把心理想的和對方溝通。如果不能換,那我只能拿掉一些比較新技術的東西,例如ajax、css3等。
不過有時候我會遇到對方用的是比較新的ie,ie8以上,但是對方再使用**會有問題,例如,點下ajax連線竟然直接顯示ajax內容而不是更新到頁面某乙個位置,或者css整個跑掉,甚至頁面空空的因為瀏覽器看不懂某個js framework。這些其實讓我頭痛了不久,因為在我電腦同樣的ie明明就不會啊?
後來我終於找到了解法,也終於弄懂到底是怎麼一回事,原來是ie的「相容模式(compatibility view)。(如果對接下來內容不感興趣,或者急需知道答案,請直接捲到最後)。
在早起ie8之前,那個時候ie瀏覽器還屬於比較獨大的情況,那個時候他有很多東西是和網路的standard不太一樣。譬如他有自己才看的懂得自定義tag。作為那個時代,很多**都是以那個時候的ie作為目標瀏覽器去寫的網頁。
隨著時間的進步,微軟意識到自己搞自己的是不行的,需要跟web standard一樣,慢慢的以前那些舊的只屬於ie有的東西就在新的ie裡面沒有了。
但是為了以前瀏覽器而設計的**要怎麼辦?他們就處於很尷尬的局面,因為如果不支援很多舊**除了會跑版以外最要命是有些功能都會有問題。
為了解決這個問題,微軟在ie8以後很佛心的加入了所謂的相容性模式,也就是能夠在舊的**使用相容性模式瀏覽,而一切正常,而到比較新的**就用正常模式瀏覽。
聽起來很棒,有問題的舊**使用ie 相容模式,新**使用正常模式。但是這個有乙個前提,那就是使用者要知道相容性模式的意義和如何切換
假設今天我用相容性模式瀏覽乙個比較新的**,會發現有很多問題。首先,很多jquery的東西都會怪怪的,像ajax就不起作用了,或者一些js ui framework就完全毀掉了。
那你或許會說,就不要開相容性模式不就好了?但問題是很多使用者不知道這個,而你和他介紹他也不一定聽得懂。而最大的問題是,相容性模式這個東西是可以設定說一直開啟。
在一些公司裡面,相容性模式是預設開啟的,意味著他們瀏覽很多網頁都是處於那種狀態,而使用者不一定知道如何把它關掉。
微軟在這一篇有提到關於如何解決相容性問題。他說,首先網頁一定要設定doctype,如果不設定,就會以quirks mode(ie5)瀏覽。
但問題是如果使用者設定使用相容模式瀏覽,就算有doctype他也會以相容模式瀏覽,那該怎麼辦?
微軟因此說我們可以加乙個metatag告知要使用的ie版本,而也是使用這個就能夠強制不要使用相容模式瀏覽。
那個「ie=edge」表示使用目前ie最新的正常模式去瀏覽。當然,你也可以指定要使用哪乙個版本的ie去瀏覽。
我在網路上搜尋的時候,發現有些人會在最後面加上chrome=1,變成:
好奇的去搜尋了一下,發現到stackoverflow也有人問了相同問題,才發現原來chrome有乙個ie add on叫做chrome frame,而作用就是在ie內使用chrome來顯示頁面,這樣老舊的ie就可以瀏覽一些新的頁面也不出問題,而那個chrome=1就表示如果有裝,就啟用。 IE 相容模式
早期的瀏覽器,ie 獨大。這也就導致其很多東西和w3c 的標準有很多不一樣的地方。譬如他有自己才看的懂得自定義tag。乙個熟悉的名詞 瀏覽器大戰,形象的刻畫了這期間發生的事情。ie 的佔用量逐步下降,firefox 和chrome異軍突起,要不是 在windows 系統,真不知道ie 是否早就消亡了...
IE 相容模式
早期的瀏覽器,ie 獨大。這也就導致其很多東西和w3c 的標準有很多不一樣的地方。譬如他有自己才看的懂得自定義tag。乙個熟悉的名詞 瀏覽器大戰,形象的刻畫了這期間發生的事情。ie 的佔用量逐步下降,firefox 和chrome異軍突起,要不是 在windows 系統,真不知道ie 是否早就消亡了...
IE相容模式
這個和ie的發展歷程相關,在ie8之前browser基本上屬於ie一家獨大,然後ie就有很多與web standard不一致的地方,比如只有自己才看得懂的tag等。後來由於chrome,ff的橫空出世,使ie感覺到了危機,然後就慢慢地與web standard靠近,但之前按照老標準做的 就會出現問題...