摘要:瀏覽器的嗅探主要基于對象的屬性對瀏覽器的類型名稱廠商以及運行環境等作出判斷,滿足不同生產環境的需求。值得一提的是,我在微信版本中測試其內置瀏覽器識別結果是,并不是微信環境。
瀏覽器的嗅探主要基于Window對象的Navigator屬性對瀏覽器的類型、名稱、廠商以及運行環境等作出判斷,滿足不同生產環境的需求。
常見的微信瀏覽器環境的判斷:
以上代碼js部分基本可以直接截取出作為微信瀏覽器運行環境下的判斷,并提供了錯誤頁內容。
Navigator對象值得一提的是,我在微信windows版本中測試其內置瀏覽器識別結果是Chrome,并不是微信環境MicroMessageer。
可以直接在瀏覽器命令行下使用window.navigator查看其包含的各種屬性內容(取常用屬性解釋):
appName
返回瀏覽器的名稱。在IE中,就是“Microsoft Internet Explorer”;在FireFox以及其他瀏覽器中,就是“Netscape”。
appVersion
返回瀏覽器的平臺和版本信息(通常以數字開始)。
platform
返回運行瀏覽器的操作系統平臺。
onLine
返回指明系統是否處于脫機模式的布爾值。
userAgent!!!
返回由客戶機發送服務器的 user-agent 頭部的值。
userAgent 屬性是一個只讀的字符串,聲明了瀏覽器用于 HTTP 請求的用戶代理頭的值。
一般來講,它是在 navigator.appCodeName 的值之后加上斜線和 navigator.appVersion 的值構成的。
例如:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)。
總結的瀏覽器嗅探插件注:用戶代理頭:user-agent header。
; var _BROWSER = (function() { function detect() { // start browser detect var nVer = navigator.appVersion, nAgt = navigator.userAgent, browser = navigator.appName, version = "" + parseFloat(navigator.appVersion), majorVersion, nameOffset, verOffset, ix, network = "unknown"; // Opera if ((verOffset = nAgt.indexOf("Opera")) != -1) { browser = "Opera"; version = nAgt.substring(verOffset + 6); if ((verOffset = nAgt.indexOf("Version")) != -1) { version = nAgt.substring(verOffset + 8); } } // Opera Next if ((verOffset = nAgt.indexOf("OPR")) != -1) { browser = "Opera"; version = nAgt.substring(verOffset + 4); } // MSIE if ((verOffset = nAgt.indexOf("MSIE")) != -1) { browser = "Microsoft Internet Explorer"; version = nAgt.substring(verOffset + 5); } // Chrome if ((verOffset = nAgt.indexOf("Chrome")) != -1) { browser = "Chrome"; version = nAgt.substring(verOffset + 7); } // Safari if ((verOffset = nAgt.indexOf("Safari")) != -1) { browser = "Safari"; version = nAgt.substring(verOffset + 7); if ((verOffset = nAgt.indexOf("Version")) != -1) { version = nAgt.substring(verOffset + 8); } } // Firefox if ((verOffset = nAgt.indexOf("Firefox")) != -1) { browser = "Firefox"; version = nAgt.substring(verOffset + 8); } // MSIE 11+ if (nAgt.indexOf("Trident/") != -1) { browser = "Microsoft Internet Explorer 11+"; version = nAgt.substring(nAgt.indexOf("rv:") + 3); } // WeiXin if (nAgt.toLowerCase().indexOf("micromessenger") != -1) { browser = "WeiXin"; if (nAgt.indexOf("NetType/WIFI") != -1) { network = "WIFI"; } else if (nAgt.indexOf("NetType/2G") != -1) { network = "2G"; } else if (nAgt.indexOf("NetType/3G+") != -1) { network = "3G+"; } else if (nAgt.indexOf("NetType/4G") != -1) { network = "4G"; } verOffset = nAgt.lastIndexOf("/") version = nAgt.substring(verOffset + 1); // if (browser.toLowerCase() == browser.toUpperCase()) { // browser = navigator.appName; // } } // Other browsers else if ((nameOffset = nAgt.lastIndexOf(" ") + 1) < (verOffset = nAgt.lastIndexOf("/"))) { browser = nAgt.substring(nameOffset, verOffset); version = nAgt.substring(verOffset + 1); if (browser.toLowerCase() == browser.toUpperCase()) { browser = navigator.appName; } } // trim the version string if ((ix = version.indexOf(";")) != -1) version = version.substring(0, ix); if ((ix = version.indexOf(" ")) != -1) version = version.substring(0, ix); if ((ix = version.indexOf(")")) != -1) version = version.substring(0, ix); majorVersion = parseInt("" + version, 10); if (isNaN(majorVersion)) { version = "" + parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion, 10); } // mobile version var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer); // start system detect var os = ""; var clientStrings = [{ s: "Windows 10", r: /(Windows 10.0|Windows NT 10.0)/ }, { s: "Windows 8.1", r: /(Windows 8.1|Windows NT 6.3)/ }, { s: "Windows 8", r: /(Windows 8|Windows NT 6.2)/ }, { s: "Windows 7", r: /(Windows 7|Windows NT 6.1)/ }, { s: "Windows Vista", r: /Windows NT 6.0/ }, { s: "Windows Server 2003", r: /Windows NT 5.2/ }, { s: "Windows XP", r: /(Windows NT 5.1|Windows XP)/ }, { s: "Windows 2000", r: /(Windows NT 5.0|Windows 2000)/ }, { s: "Windows ME", r: /(Win 9x 4.90|Windows ME)/ }, { s: "Windows 98", r: /(Windows 98|Win98)/ }, { s: "Windows 95", r: /(Windows 95|Win95|Windows_95)/ }, { s: "Windows NT 4.0", r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/ }, { s: "Windows CE", r: /Windows CE/ }, { s: "Windows 3.11", r: /Win16/ }, { s: "Android", r: /Android/ }, { s: "Open BSD", r: /OpenBSD/ }, { s: "Sun OS", r: /SunOS/ }, { s: "Linux", r: /(Linux|X11)/ }, { s: "iOS", r: /(iPhone|iPad|iPod)/ }, { s: "Mac OS X", r: /Mac OS X/ }, { s: "Mac OS", r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ }, { s: "QNX", r: /QNX/ }, { s: "UNIX", r: /UNIX/ }, { s: "BeOS", r: /BeOS/ }, { s: "OS/2", r: /OS/2/ }, { s: "Search Bot", r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves/Teoma|ia_archiver)/ }]; for (var id in clientStrings) { var cs = clientStrings[id]; if (cs.r.test(nAgt)) { os = cs.s; break; } } var osVersion = ""; if (/Windows/.test(os)) { osVersion = /Windows (.*)/.exec(os)[1]; os = "Windows"; } switch (os) { case "Mac OS X": osVersion = /Mac OS X (10[.\_d]+)/.exec(nAgt)[1]; break; case "Android": osVersion = /Android ([.\_d]+)/.exec(nAgt)[1]; break; case "iOS": osVersion = /OS (d+)_(d+)_?(d+)?/.exec(nVer); osVersion = osVersion[1] + "." + osVersion[2] + "." + (osVersion[3] | 0); break; } //detect data var params = {}; params.os = os; //操作系統 params.osVersion = osVersion ? osVersion : "unknown"; //操作系統版本 params.mobile = mobile; //是否移動端訪問 params.browser = browser; //瀏覽器 params.browserVersion = version; //瀏覽器版本 params.browserMajorVersion = majorVersion; //瀏覽器major版本 //輸出對象 return params; } return { detect: detect } })();
調用方法借鑒了https://segmentfault.com/q/10...,但其代碼有嚴重漏洞,尤其在檢測是否在微信環境居然以網絡類型為條件,坑死我了。在此將其封裝為插件。
BROSWER.detect()返回結果示例
{ "os":"Windows", "osVersion":"7", "mobile":false, "browser":"Chrome", "browserVersion":"59.0.3071.115", "browserMajorVersion":59 }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89177.html
摘要:嗅探器允許從正在運行的集群中自動發現節點并將它們設置到現有的實例的最小的庫,它默認使用節點信息檢索屬于集群的節點,并使用解析獲得的響應。可以在找到客戶端嗅探器的。 嗅探器 允許從正在運行的Elasticsearch集群中自動發現節點并將它們設置到現有的RestClient實例的最小的庫,它默認使用節點信息api檢索屬于集群的節點,并使用jackson解析獲得的json響應。 與Elas...
摘要:由于那個時候是霸主,這也導致微軟推出的時候必須把自己偽裝成瀏覽器,于是他們的也是以開頭的。各個版本典型的如下其中之后的就是當前的版本號。的幾個版本的其中之后的是版本號提供了專門的瀏覽器標志,就是屬性。目前,的是其中,版本號在之后的數字。 瀏覽器嗅探 瀏覽器嗅探不用說了,為了更好的性能,會需要各種各樣的兼容性處理,自然就會有針對不同瀏覽器的判斷.一般的代碼中,我們都是通過navigato...
閱讀 1523·2023-04-26 02:03
閱讀 4707·2021-11-22 13:53
閱讀 4579·2021-09-09 11:40
閱讀 3782·2021-09-09 09:34
閱讀 2125·2019-08-30 13:18
閱讀 3501·2019-08-30 11:25
閱讀 3295·2019-08-26 14:06
閱讀 2545·2019-08-26 13:52