跳到主要內容

偵測瀏覽器版本

JavaScript的全域變數 navigator.userAgent 是現在判斷瀏覽器版本的依據
它最一開始是被瀏覽器用來標示支援的標準
隨著瀏覽器的演化,同個支系的瀏覽器很可能已經跟祖先支援的標準沒什麼關係了
但是基於相容性的考量,以前的userAgent的內容也往往會被繼承,並添上新的標準的標示
以Chrome的userAgent為例
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31"

"KHTML"是最早期的瀏覽器標準之一,已經跟現代瀏覽器的標準沒什麼關係了
"Safari"也是Chrome剛推出時,為了標明相容Safari的標準規格而加上去的
其餘的標示依此類推,可以知道userAgent並不是那麼明確
特別是行動版本的瀏覽器因實作廠商眾多,userAgent更是混亂
要判斷行動瀏覽器版本可參考之前的文章

雖然userAgent並不是完全符合瀏覽器的狀況,但要判斷瀏覽器版本也只能靠它了
以下實作簡單的判斷瀏覽器的版本

var ua = navigator.userAgent;
var browserType =  (window.opera) ? 'Opera' :
                              (/Firefox/i.test(ua)) ? 'Firefox' :
                              (/Chrome/i.test(ua)) ? 'Chrome' :
                              (ua.toLowerCase().indexOf("safari") != -1) ? 'Safari' :
                              (/MSIE/i.test(ua)) ? 'IE' :
                              'Other';

上述範例要略微注意的是Chrome的判斷要在Safari前,因為是Chrome的userAgent也有Safari標示
實務上最常需要做瀏覽器判斷的還是舊版IE
目前較新的IE10對標準的遵守程度已經跟Firefox、Chrome很接近了,IE9勉強還算可以
進一步區別新舊IE可以參考判斷IE版本的簡單方法

留言