摘要:博文模塊增強模式進行客戶端檢測標簽博文常用的檢測方式為能力檢測用戶代理檢測這里有用戶代理檢測檢測插件非瀏覽器是一個包含瀏覽器插件的數組這個數組的每一項都包含插件的名字插件的描述插件的文件名插件所處理的類型數量檢測插件在中無效方法用于把字符串
[博文]模塊增強模式進行客戶端檢測
標簽: 博文
常用的檢測方式為:
[ ] 1 . 能力檢測
[ ] 2 . 用戶代理檢測
這里有 2 用戶代理檢測
檢測插件 P211
非IE瀏覽器: navigator.plugins是一個包含瀏覽器插件的數組, 這個數組的每一項都包含: name : 插件的名字. description: 插件的描述 filename: 插件的文件名 length: 插件所處理的MIME類型數量 // 檢測插件(在IE中無效): function hasPlugin(name){ name = name.toLowerCase(); //toLowerCase() 方法用于把字符串轉換為小寫 for(var i=0;i-1){ // >-1表示找到 return true } } return false; }; // 檢測Flash alert(hasPlugin("Flash")); // 檢測QuickTime alert(hasPlugin("QuickTime")); IE瀏覽器 // 檢測IE的插件 // ========== // = IE以COM對象的方式實現插件,而COM對象使用唯一標示符來標識,因此要檢測插件必須知道其 = // = COM標識符,例如,Flash的標識符是ShockwaveFlash.ShockwaveFlash = // ========== function hasIEPlugin(name){ try{ new ActiveXOBject(name); return true; }catch(e){ return false; //TODO handle the exception } }; // IE中檢測Flash alert(hasIEPlugin("ShockwaveFlash.ShockwaveFlash")); 在所有瀏覽器中檢測 // 結合之前的2個檢測函數,檢測所有的瀏覽器中的FLash function hasFLash(){ var result = hasPlugin("Flash"); if(!result){ result.hasIEPlugin("ShockwaveFlash.ShockwaveFlash"); } return result; // true or false }; function hasQuickTime(){ var result = hasPlugin("QuickTime"); if (!result) { result = hasIEPlugin("QuickTime.Quicktime"); } return result; };
檢測瀏覽器引擎 :
var client = function (){ var engine = { // 呈現引擎 ie:0, // IE瀏覽器內核 gecko:0, // Firefox瀏覽器內核 webkit:0, // google->chrome和apple->safari內核 khtml:0, // Konqueror(linux平臺中的一個瀏覽器)的內核->KHTML opera:0, // Opera // 具體的版本號 ver : null }; // 檢測呈現引擎, 平臺, 設備 return { engine : engine }; }(); // ====================== // = 檢測客戶端=>識別呈現引擎 = // ====================== var ua = navigator.userAgent; console.log(ua); // = 第一步先檢測Opera = if(window.opera){ // 如果是Opera瀏覽器, 則獲得瀏覽器版本 client.ver = window.opera.version(); // window.opera在Opera 5.0及更高版本中存在,在Opera 7.6及更高版本中,調用version()方法可以放回一個表示瀏覽器版本的字符串 client.opera = parseFloat(client.ver); }else if(/AppleWebKit/(S+)/.test(ua)){ // = 第二步檢測Webkit = // webkit的用戶代理字符串中的"AppleWebkit"是獨一無二的, 所以檢測這個字符串 // S : 表示非空格的特殊字符 client.ver = RegExp["$1"]; client.webkit = parseFloat(client.ver); }else if(/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)){ // = 第三步檢測KHTML = // 在Konqueror 3.1及更早版本中不包括KHTML的版本, 故而使用Konqueror的版本來代替 client.ver = RegExp["$1"]; client.khtml = parseFloat(client.ver) }else if(/rv:([^)]+)) Gecko/d{8}/.test(ua)){ // = 第四步檢測Gecko = // "Gecko" 會出現在字符串"rv:"之后 ;字符串"rv:"在前面; client.ver = RegExp["$1"]; client.khtml = parseFloat(client.ver) }else if(/MSIE ([^;]+)/.test(ua)){ // = 第五步檢測IE = client.ver = RegExp["$1"]; client.ie = parseFloat(client.ver) } // 執行代碼 if(client.ie){ // 如果是IE呈現引擎, client.ie應該大于0 // 針對IE的代碼 alert("我是IE ie引擎"); }else if (client.gecko > 1.5){ // 如果是gecko呈現引擎(firefox) if(client.ver == "1.8.1"){ // 針對這版本進行操作 } alert("我是firefox gecko引擎"); }else if(client.webkit){ alert("我是chrome webkie引擎"); }else if(client.khtml){ alert("我是KHTML 引擎"); }else if(client.opera){ alert("我是opera引擎"); }
檢測瀏覽器品牌 :
var client = function (){ var engine = { // 呈現引擎 ie:0, // IE瀏覽器內核 gecko:0, // Firefox瀏覽器內核 webkit:0, // google->chrome和apple->safari內核 khtml:0, // Konqueror(linux平臺中的一個瀏覽器)的內核->KHTML opera:0, // Opera // 具體的版本號 ver : null }; var browser = { //瀏覽器 ie : 0, firefox:0, safari:0, honq:0, opera:0, chrome:0, // 具體的版本號 ver : null }; // 檢測呈現引擎, 平臺, 設備 return { engine : engine, browser : browser }; }(); // ====================== // = 檢測客戶端=>識別呈現引擎 = // = 檢測客戶端=>識別瀏覽器 = // ====================== var ua = navigator.userAgent; // = 第一步先檢測Opera = var o = window.opera || window.opr console.log(ua); if(o){ // 如果是Opera瀏覽器, 則獲得瀏覽器版本 client.engine.ver = client.browser.ver = (/OPR/(.*)/.exec(ua))[1]; // window.opera在Opera 5.0及更高版本中存在,在Opera 7.6及更高版本中,調用version()方法可以放回一個表示瀏覽器版本的字符串 client.engine.opera = client.browser.opera = parseFloat(client.engine.ver); }else if(/AppleWebKit/(S+)/.test(ua)){ // = 第二步檢測Webkit = // webkit的用戶代理字符串中的"AppleWebkit"是獨一無二的, 所以檢測這個字符串 // S : 表示非空格的字符 client.engine.ver = RegExp["$1"]; client.engine.webkit = parseFloat(client.engine.ver); //確定是Chrome 還是 Safari if(/Chrome/(S+)/.test(ua)){ client.browser.ver = RegExp["$1"]; client.browser.chrome = parseFloat(client.browser.ver); }else if(/Version/(S+)/.test(ua)){ client.browser.ver = RegExp["$1"]; client.browser.safari = parseFloat(client.browser.ver); }else{ //近似的確定版本號 var safariVersion = 1; if(client.webkit < 100){ safariVersion = 1; }else if(client.webkit < 312){ safariVersion = 1.2; }else if(client.webkit < 412){ safariVersion = 1.3; }else{ safariVersion = 2; } client.browser.safari = client.browser.ver = safariVersion; } }else if(/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)){ // = 第三步檢測KHTML = // 在Konqueror 3.1及更早版本中不包括KHTML的版本, 故而使用Konqueror的版本來代替 client.engine.ver = client.browser.ver = RegExp["$1"]; client.engine.khtml = client.browser.konq = parseFloat(client.engine.ver) }else if(/rv:([^)]+)) Gecko/d{8}/.test(ua)){ // = 第四步檢測Gecko = // "Gecko" 會出現在字符串"rv:"之后 ;字符串"rv:"在前面; client.engine.ver = RegExp["$1"]; client.engine.gecko = parseFloat(client.engine.ver); //確定是不是firefox if(/Firefox/(S+)/.test(ua)){ client.browser.ver = RegExp["$1"]; client.browser.firefox = parseFloat(client.browser.ver); } }else if(/MSIE ([^;]+)/.test(ua)){ // = 第五步檢測IE = client.engine.ver = client.browser.ver = RegExp["$1"]; client.engine.ie = client.browser.ie = parseFloat(client.engine.ver) } // 檢測引擎邏輯代碼 if(client.engine.ie){ // 如果是IE呈現引擎, client.engine.ie應該大于0 // 針對IE的代碼 alert("我是IE ie引擎"); }else if (client.engine.gecko > 1.5){ // 如果是gecko呈現引擎(firefox) if(client.engine.ver == "1.8.1"){ // 針對這版本進行操作 } alert("我是firefox gecko引擎"); }else if(client.engine.webkit){ alert("我是webkie引擎"); }else if(client.engine.khtml){ alert("我是KHTML 引擎"); }else if(client.engine.opera){ alert("我是opera引擎"); } // 檢測瀏覽器邏輯代碼 if(client.engine.webkit){ // 如果為webkit引擎 if(client.browser.chrome){ alert("我是google chrome") }else if(client.browser.safari){ alert("我是Safari") } }else if(client.engine.gecko){ if(client.browser.firefox){ alert("我是火狐") }else{ alert("gecko.....") } }else if(client.browser.ie){ alert("我是IE") }else if(client.browser.opera){ alert("我是Opera") }用戶代理檢測 總結(上面的代碼并入)
這種方法對用戶代理字符串有很大的依賴性, 不推薦
// 模塊增強模式進行客戶端檢測 var client = function() { var engine = { // 呈現引擎 ie: 0, // IE瀏覽器內核 gecko: 0, // Firefox瀏覽器內核 webkit: 0, // google->chrome和apple->safari內核 khtml: 0, // Konqueror(linux平臺中的一個瀏覽器)的內核->KHTML opera: 0, // Opera // 具體的版本號 ver: null }; var browser = { // 瀏覽器 ie: 0, firefox: 0, safari: 0, konq: 0, opera: 0, chrome: 0, // 具體的版本號 ver: null }; var system = { // 平臺, 設備和操作系統 win: false, mac: false, x11: false, // 數字1 // 移動設備 iphone: false, ipod: false, ipad: false, ios: false, android: false, nokiaN: false, // 諾基亞N系列 winMobile: false, // window phone系列 // 游戲系統 wii: false, // 任天堂 ps: false } // 檢測呈現引擎和瀏覽器 var ua = navigator.userAgent; // = 第一步先檢測Opera = var o = window.opera || window.opr; if(o) { // 如果是Opera瀏覽器, 則獲得瀏覽器版本 engine.ver = browser.ver = (/OPR/(.*)/.exec(ua))[1]; // window.opera在Opera 5.0及更高版本中存在,在Opera 7.6及更高版本中,調用version()方法可以放回一個表示瀏覽器版本的字符串 engine.opera = browser.opera = parseFloat(engine.ver); } else if(/AppleWebKit/(S+)/.test(ua)) { // = 第二步檢測Webkit = // webkit的用戶代理字符串中的"AppleWebkit"是獨一無二的, 所以檢測這個字符串 // S : 表示非空格的字符 engine.ver = RegExp["$1"]; engine.webkit = parseFloat(engine.ver); //確定是Chrome 還是 Safari if(/Chrome/(S+)/.test(ua)) { browser.ver = RegExp["$1"]; browser.chrome = parseFloat(browser.ver); } else if(/Version/(S+)/.test(ua)) { browser.ver = RegExp["$1"]; browser.safari = parseFloat(browser.ver); } else { //近似的確定版本號 var safariVersion = 1; if(engine.webkit < 100) { safariVersion = 1; } else if(engine.webkit < 312) { safariVersion = 1.2; } else if(engine.webkit < 412) { safariVersion = 1.3; } else { safariVersion = 2; } browser.safari = browser.ver = safariVersion; } } else if(/KHTML/(S+)/.test(ua) || /Konqueror/([^;]+)/.test(ua)) { // = 第三步檢測KHTML = // 在Konqueror 3.1及更早版本中不包括KHTML的版本, 故而使用Konqueror的版本來代替 engine.ver = browser.ver = RegExp["$1"]; engine.khtml = browser.konq = parseFloat(engine.ver) } else if(/rv:([^)]+)) Gecko/d{8}/.test(ua)) { // = 第四步檢測Gecko = // "Gecko" 會出現在字符串"rv:"之后 ;字符串"rv:"在前面; engine.ver = RegExp["$1"]; engine.gecko = parseFloat(engine.ver); //確定是不是firefox if(/Firefox/(S+)/.test(ua)) { browser.ver = RegExp["$1"]; browser.firefox = parseFloat(browser.ver); } } else if(/MSIE ([^;]+)/.test(ua)) { // = 第五步檢測IE = engine.ver = browser.ver = RegExp["$1"]; engine.ie = browser.ie = parseFloat(engine.ver) } // 檢測平臺 var p = navigator.platform; // 可能出現的值:Win32, Win64, MacPPC, MacIntel, X11, Linux i686; // 檢測前綴, 向前兼容 system.win = p.indexOf("Win") == 0; system.mac = p.indexOf("Mac") == 0; system.x11 = (p.indexOf("X11") == 0) || (p.indexOf("Linux") == 0); // 檢測Windows 操作系統 if(system.win) { if(/Win(?:dows )?([^do]{2})s?(d+.d+)?/.test(ua)) { if(RegExp["$1"] == "NT") { switch(RegExp["$2"]) { case "5.0": system.win = "2000"; break; case "5.1": system.win = "Xp"; break; case "6.0": system.win = "Vista"; break; case "6.1": system.win = "7"; break; default: system.win = "NT"; break; } } else if(RegExp["$1"] == "9x") { system.win = "ME"; } else { system.win = RegExp["$1"]; } } } // 檢測移動設備 system.iphone = ua.indexOf("iPone") > -1; system.ipod = ua.indexOf("iPod") > -1; system.ipad = ua.indexOf("iPad") > -1; system.nokiaN = ua.indexOf("NokiaN") > -1; // windows mobile設備, 又稱windows CE if(system.win == "CE"){ // 老版本的windows Mobile system.winMobile = system.win; }else if(system.win == "Ph"){ if(/Window Phone OS (d+.d+)/.test(ua)){ // windows phone7或更新 system.win = "Phone"; system.winMobile = parseFloat(RegExp["$1"]); } } // 檢測IOS版本 if(system.mac && ua.indexOf("Mobile") > -1){ if(/CPU (?:iPhone )?OS (d+_d+)/.test(ua)){ system.ios = parseFloat(RegExp.$1.replace("_", ".")); }else{ system.ios = 2; // 無法檢測, 推測為低版本 } } // 檢測Android 版本 if(/Android (d+.d+)/.test(ua)){ system.android = parseFloat(RegExp.$1); } // 檢測游戲系統 system.wii = ua.indexOf("Wii") > -1; system.ps = /playstation/i.test(ua); // 返回呈現引擎, 平臺, 設備 return { engine: engine, browser: browser, system: system }; }();
[ ] 接上步操作 ↑ 檢測:
// 檢測引擎邏輯代碼 if(client.engine.ie) { // 如果是IE呈現引擎, engine.ie應該大于0 // 針對IE的代碼 alert("我是IE ie引擎"); } else if(client.engine.gecko > 1.5) { // 如果是gecko呈現引擎(firefox) if(client.engine.ver == "1.8.1") { // 針對這版本進行操作 } alert("我是firefox gecko引擎"); } else if(client.engine.webkit) { alert("我是webkie引擎"); } else if(client.engine.khtml) { alert("我是KHTML 引擎"); } else if(client.engine.opera) { alert("我是opera引擎"); } // 檢測瀏覽器品牌邏輯代碼 if(client.engine.webkit) { // 如果為webkit引擎 if(client.browser.chrome) { alert("我是google chrome") } else if(client.browser.safari) { alert("我是Safari") } } else if(client.engine.gecko) { if(client.browser.firefox) { alert("我是火狐") } else { alert("gecko.....") } } else if(client.browser.ie) { alert("我是IE") } else if(client.browser.opera) { alert("我是Opera") } // 檢測平臺邏輯代碼 if(client.system.win) { alert("window 平臺") } else if(client.system.mac) { alert("Mac 平臺") } else if(client.system.x11) { alert("Unix(Linux) 平臺") }網上檢測方法:
var browser = { v: (function() { var u = navigator.userAgent, app = navigator.appVersion, p = navigator.platform; return { trident: u.indexOf("Trident") > -1, //IE內核 presto: u.indexOf("Presto") > -1, //opera內核 webKit: u.indexOf("AppleWebKit") > -1, //蘋果、谷歌內核 gecko: u.indexOf("Gecko") > -1 && u.indexOf("KHTML") == -1, //火狐內核 mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否為移動終端 ios: !!u.match(/i[^;]+;( U;)? CPU.+Mac OS X/), //ios終端 android: u.indexOf("Android") > -1 || u.indexOf("Linux") > -1, //android終端或uc瀏覽器 iPhone: u.indexOf("iPhone") > -1, //是否為iPhone或者QQHD瀏覽器 iPad: u.indexOf("iPad") > -1, //是否iPad weixin: u.indexOf("MicroMessenger") > -1, //是否微信 webApp: u.indexOf("Safari") == -1, //是否web應該程序,沒有頭部與底部 UCB: u.match(/UCBrowser/i) == "UCBrowser", QQB: u.match(/MQQBrowser/i) == "MQQBrowser", win: p.indexOf("Win") > -1, //判斷是否是WIN操作系統 mac: p.indexOf("Mac") > -1 //判斷是否是Mac操作系統 }; })() } if("v"=="v"){//true為IE瀏覽器,感興趣的同學可以去搜下,據說是現有最流行的判斷瀏覽器的方法 // ... }
原文地址: https://segmentfault.com/a/11...
如果喜歡, 應該: 點贊 $underline{或者}$ ...
如果有 新的想法 可以直接在下方評論或者 聯系我 。
作者 [@Qing]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83828.html
摘要:函數類型檢測是的子類型,其屬性為參數個數,但是判斷結果有內建函數原生函數常見的有,可能被當作構造函數來使用,創建出來的是封裝了的基本類型值。構造函數可以不帶關鍵字。建議使用和來進行顯示強制轉換。 前言 此篇小結來源與《你不知道的JavaScript》和《JavaScript高級程序設計》的結合??或許是的,龜速總結中... 七種內置類型 null undefined boolean ...
摘要:為什么會產生閉包究其根本,是因為代表的函數包含的作用域。而在作用域鏈中,外部函數的活動對象始終處于第二位,外部函數的外部函數的活動對象處于第三位直到作為作用域鏈終點的全局執行環境。 前言 此文的內容主要是來自看書的總結+小小的實踐哦~會不斷更新總結。 什么是閉包 書上是這樣定義閉包的: 有權訪問另一個函數作用域中變量的函數。 舉一個例子: function test(){ va...
摘要:官方默認項目是存放了一個為的打開文件夾有一個,還有一個名為組件的文件夾,里面放了一個文件。部分我們會發現這幾排字就是顯示在頁面的幾排文字部分這其中的這個文件引入了,還有上述的。結合查詢其他說法,就是說它會把是的元素以形式替換。 前言 我很早就想來學習學習vue.js啦,終于有了那么一些空閑的時間可以拿來學習,于是從前天開始我就每天抽一個多小時來體驗vue.js。當然啦,因為是小白入門,...
摘要:之銀彈技法下文這些淫巧在之前自認為是居家必備,裝逼撩妹的必備之物,博主一直敝帚自珍,不愿拿出來分享,現如今,極盡能事,我知道再不拿出來就在沒有價值了來由博主入行前端寫時候,因為需要兼容低版本,時常需要在繁雜冗長的操作夾雜的代碼中,盡可能巧妙 JavaScript 之銀彈の技法 下文這些淫巧在之前自認為是居家必備,裝逼撩妹的必備之物,博主一直敝帚自珍,不愿拿出來分享,現如今,ES6+極盡...
閱讀 2241·2021-11-24 11:15
閱讀 3091·2021-11-24 10:46
閱讀 1389·2021-11-24 09:39
閱讀 3927·2021-08-18 10:21
閱讀 1484·2019-08-30 15:53
閱讀 1400·2019-08-30 11:19
閱讀 3328·2019-08-29 18:42
閱讀 2326·2019-08-29 16:58