摘要:由于那個(gè)時(shí)候是霸主,這也導(dǎo)致微軟推出的時(shí)候必須把自己偽裝成瀏覽器,于是他們的也是以開頭的。各個(gè)版本典型的如下其中之后的就是當(dāng)前的版本號(hào)。的幾個(gè)版本的其中之后的是版本號(hào)提供了專門的瀏覽器標(biāo)志,就是屬性。目前,的是其中,版本號(hào)在之后的數(shù)字。
瀏覽器嗅探
瀏覽器嗅探不用說了,為了更好的性能,會(huì)需要各種各樣的兼容性處理,自然就會(huì)有針對(duì)不同瀏覽器的判斷.
一般的代碼中,我們都是通過navigator.userAgent來判斷不同的瀏覽器的情況的。
火狐:
chrome:
ie8:
sougou高速:
sougou兼容:
首先為什么全部都是Mozilla打頭,而后后面的一堆內(nèi)容都是什么,我們獲取瀏覽器是什么,版本號(hào)是什么,當(dāng)前是什么設(shè)備,當(dāng)前是什么操作系統(tǒng),分別應(yīng)該從哪個(gè)字段里面判斷呢?
為什么都是Mozilla打頭
最早的時(shí)候,Netscape 把他們?yōu)g覽器中的 User-Agent 定成了 Mozilla/4.04 (Macintosh; I; PPC) 的形式。由于里面包含了引擎名和版本信息,那個(gè)時(shí)候很多做網(wǎng)站的程序員就利用 User-Agent 來判斷瀏覽器特性(比如是否支持 frame 等),對(duì)于他們認(rèn)為不符合要求的瀏覽器顯示不兼容內(nèi)容(就像現(xiàn)在程序員歧視 IE 6 那樣)。
由于那個(gè)時(shí)候 Netscape 是霸主,這也導(dǎo)致微軟推出 IE 的時(shí)候必須把自己偽裝成 Netscape 瀏覽器,于是他們的 User-Agent 也是以 Mozilla/4.0 開頭的。(當(dāng)然微軟成為霸主之后就用一句「for historical reasons」淡定地帶過此歷史。)后來這也就成為了事實(shí)標(biāo)準(zhǔn),所有主要瀏覽器都以 Mozilla/x.0 開頭了。
參考:https://msdn.microsoft.com/en-us/library/ms537503%28v=vs.85%29;http://www-archive.mozilla.org/build/user-agent-strings.html
詳細(xì)的各個(gè)瀏覽器的各個(gè)字段的意義
基本上大概是這樣的,但是瀏覽器的世界你懂得,還是有各種各樣的。
已經(jīng)有不少人整理里,不貼了,移步查看
http://www.cnblogs.com/georgewing/archive/2010/01/18/1650960.html
那么好吧,知道這么多,怎么破,怎么做各種各樣的判斷呢?
我們先來分析一下各種瀏覽器的特征及其userAgent
IE只有IE支持創(chuàng)建ActiveX控件,因此,ActiveObject函數(shù)可以作為判斷標(biāo)準(zhǔn)。
IE各個(gè)版本典型的userAgent如下:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
其中MSIE之后的就是當(dāng)前ie的版本號(hào)。
FirefoxFirefox中的DOM元素有這么個(gè)getBoxObjectFor函數(shù),用來獲取DOM元素的位置和大小。這是Firefoxd獨(dú)有的,so,你懂得。
Firefox的幾個(gè)版本的userAgent:
Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12
其中Firefox之后的是版本號(hào)
OperaOpera提供了專門的瀏覽器標(biāo)志,就是window.opera屬性。Opera典型的userAgent如下:
Opera/9.27 (Windows NT 5.2; U; zh-cn)
Opera/8.0 (Macintosh; PPC Mac OS X; U; en)
Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0
Safari瀏覽器中有一個(gè)其他瀏覽器沒有的openDatabase函數(shù),可做為判斷Safari的標(biāo)志。Safari典型的userAgent如下
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
其版本號(hào)是Version之后的數(shù)字。
ChromeChrome有一個(gè)MessageEvent函數(shù),但Firefox也有。不過,好在Chrome并沒有Firefox的getBoxObjectFor函數(shù),根據(jù)這個(gè)條件還是可以準(zhǔn)確判斷出Chrome瀏覽器的。目前,Chrome的userAgent是:
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
其中,版本號(hào)在Chrome之后的數(shù)字。
代碼奉上普通青年
var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/msie ([d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/firefox/([d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/chrome/([d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/opera.([d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/version/([d.]+).*safari/)) ? Sys.safari = s[1] : 0; //以下進(jìn)行測(cè)試 if (Sys.ie) document.write("IE: " + Sys.ie); if (Sys.firefox) document.write("Firefox: " + Sys.firefox); if (Sys.chrome) document.write("Chrome: " + Sys.chrome); if (Sys.opera) document.write("Opera: " + Sys.opera); if (Sys.safari) document.write("Safari: " + Sys.safari);
以上方法好看好懂,基本的模板實(shí)現(xiàn),均是這種標(biāo)準(zhǔn)
文藝青年
var Sys = {};
var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) Sys.ie = ua.match(/msie ([d.]+)/)[1] else if (document.getBoxObjectFor) Sys.firefox = ua.match(/firefox/([d.]+)/)[1] else if (window.MessageEvent && !document.getBoxObjectFor) Sys.chrome = ua.match(/chrome/([d.]+)/)[1] else if (window.opera) Sys.opera = ua.match(/opera.([d.]+)/)[1] else if (window.openDatabase) Sys.safari = ua.match(/version/([d.]+)/)[1]; //以下進(jìn)行測(cè)試 if(Sys.ie) document.write("IE: "+Sys.ie); if(Sys.firefox) document.write("Firefox: "+Sys.firefox); if(Sys.chrome) document.write("Chrome: "+Sys.chrome); if(Sys.opera) document.write("Opera: "+Sys.opera); if(Sys.safari) document.write("Safari: "+Sys.safari);
文藝方法,高效率,知道的知識(shí)點(diǎn)需要更多,但是不好讀,別人拿到估計(jì)會(huì)不太高興的。
touch設(shè)備的檢測(cè)連買帶送
var navigator = window.navigator, userAgent = navigator.userAgent, android = userAgent.match(/(Android)[s/]+([d.]+)/), ios = userAgent.match(/(iPad|iPhone|iPod)s+OSs([d_.]+)/), wp = userAgent.match(/(Windowss+Phone)s([d.]+)/), isWebkit = /WebKit/[d.]+/i.test(userAgent), isSafari = ios ? (navigator.standalone ? isWebkit: (/Safari/i.test(userAgent) && !/CriOS/i.test(userAgent) && !/MQQBrowser/i.test(userAgent))) : false, os = {}; if (android) { os.android = true; os.version = android[2]; } if (ios) { os.ios = true; os.version = ios[2].replace(/_/g, "."); os.ios7 = /^7/.test(os.version); if (ios[1] === "iPad") { os.ipad = true; } else if (ios[1] === "iPhone") { os.iphone = true; os.iphone5 = screen.height == 568; } else if (ios[1] === "iPod") { os.ipod = true; } } if (wp) { os.wp = true; os.version = wp[2]; os.wp8 = /^8/.test(os.version); } if (isWebkit) { os.webkit = true; } if (isSafari) { os.safari = true; } return os;
好不好用,自己試試
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79678.html
摘要:事件詳細(xì)研究邊界事件外鏈樣式在某些瀏覽器下面會(huì)影響腳本的加載。事件和事件是同時(shí)的。這就是要監(jiān)聽頁面的事件,當(dāng)事件為時(shí)就可以開始做的事情了。 頁面加載狀態(tài) $(document).ready() $(function(){}) 這兩個(gè)是我們?cè)陧撁娉跏蓟瘯r(shí)經(jīng)常使用的監(jiān)聽方案,那么他的實(shí)際的執(zhí)行關(guān)系時(shí)什么樣的呢?在原生js中是什么樣的一種表現(xiàn)? 以下我會(huì)一而再再而三的寫DOMConten...
摘要:事件詳細(xì)研究邊界事件外鏈樣式在某些瀏覽器下面會(huì)影響腳本的加載。事件和事件是同時(shí)的。這就是要監(jiān)聽頁面的事件,當(dāng)事件為時(shí)就可以開始做的事情了。 頁面加載狀態(tài) $(document).ready() $(function(){}) 這兩個(gè)是我們?cè)陧撁娉跏蓟瘯r(shí)經(jīng)常使用的監(jiān)聽方案,那么他的實(shí)際的執(zhí)行關(guān)系時(shí)什么樣的呢?在原生js中是什么樣的一種表現(xiàn)? 以下我會(huì)一而再再而三的寫DOMConten...
摘要:拋開一直寫的那個(gè)不講,我們說的是一個(gè)簡(jiǎn)單的模塊加載器的簡(jiǎn)單實(shí)現(xiàn)。非常好實(shí)現(xiàn),忽略不提。是第一個(gè)冒出來的,但是,一般提到他都會(huì)是棄用的,會(huì)有安全的漏洞更好的方案是構(gòu)造器。 什么是模塊化,為什么要模塊化 裝個(gè)b,貼一段English A beginning programmer writes her programs like an ant builds her hill, one pie...
摘要:說明的核心容器有一部分就是利用反射來實(shí)現(xiàn)依賴注入時(shí)類的實(shí)例化。這是一個(gè)簡(jiǎn)化版示例。 說明 Laravel的核心容器,有一部分就是利用反射來實(shí)現(xiàn)依賴注入時(shí)類的實(shí)例化。這是一個(gè)簡(jiǎn)化版示例。 代碼 測(cè)試用的類 /** * 坦克標(biāo)準(zhǔn): 必須能開火 */ interface Tank { public function fire(); } /** * 59坦克,使用100毫米炮...
摘要:希望幫助更多的前端愛好者學(xué)習(xí)。前端開發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開發(fā)工程師當(dāng)你問起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒有網(wǎng)絡(luò)請(qǐng)求功能的庫。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡(jiǎn)單 原文地址:Learning React.js is easier than you think 原文作...
閱讀 2164·2021-11-24 09:39
閱讀 1656·2021-10-11 10:59
閱讀 2576·2021-09-24 10:28
閱讀 3459·2021-09-08 09:45
閱讀 1344·2021-09-07 10:06
閱讀 1749·2019-08-30 15:53
閱讀 2145·2019-08-30 15:53
閱讀 1477·2019-08-30 15:53