由於IE7為了支援標準語法,因此作了大幅修正,這是IE6與IE7之所以會產生某些不相容的原因,然而IE7語法仍然和Firefox、Safari、Opera這些瀏覽器有些差異,因此如果想要正確判斷瀏覽器正確方法如下:



進行非同步傳輸時,XMLHTTPRequest物件是用來溝通伺服器與瀏覽器的橋樑,它可以讓瀏覽器透過HTTP協定傳送與接收XML與文字格式的資料。這個概念是由微軟最先提出,並在IE 5中實作,不過當時採用的是ActiveX控制項的技術,後來其他瀏覽器則以XMLHTTPRequest作為非同步傳輸的物件。

這種情況,造成過去Ajax應用在處理時,必須判斷非同步傳輸究竟是採用XMLHTTPRequest或ActiveXObject,以採取不同的處理方式。而當IE7決定向標準化靠攏時,雖然立意良好,讓IE7更接近其他瀏覽器,但在細節上,仍有不同。而更麻煩的是IE7的作法還與IE6不同,因此過去只需作兩種判斷,現在必須要做三種。

由於IE7向主流看齊,採用XMLHttpRequest作為非同步傳輸的物件,因此可以用它與IE6作區分;而IE7與其他瀏覽器的差別,在於它的瀏覽器物件模型中仍具有ActiveXObject物件,因此可以利用這個判斷式作檢查。利用這種方式,就能將上述三種不同的瀏覽器行為區隔出來。

也有人用下面的語法來做判別:



這是利用IE7和Firefox等瀏覽器支援maxHeight的屬性,但IE6等舊版瀏覽器不支援的特性做判斷,但這種方式如果遇到IE7與Firefox這類瀏覽器不同的行為時,就會發生問題,因此並非最佳解法。
如果要做到更精確的版本判別,就必須從瀏覽器的User Agent String下手,開發人員可以用JavaScript的函式indexOf,在User Agent String中找出正確的瀏覽器名稱及版本。IE系列是採MSIE加上版號,例如以IE7而言,它在XP上的User Agent String是:



如果是IE6的話,上述MSIE7.0的地方會被置換成MSIE6.0,以此類推,就能找出IE各系列的版本,再針對各版本進行最佳化處理。同樣的,Firefox或Safari都可藉User Agent String字串判斷出瀏覽器,依此進行語法調整。文⊙黃天賜

熱門新聞

Advertisement