UNPKG

artitalk

Version:

基于leancloud实现的静态页面可实时发布说说/微语的js

145 lines (142 loc) 5.7 kB
/** * 浏览器识别 * @author houchuanjie */ ;(function(window, document) { var Engine = function() { var name = null; var version = null; }; var System = function() { var name = null; var version = null; }; var Browser = function() { var name = null; //浏览器名称 var version = null; //浏览器版本号 }; var Client = function() { this.browser = new Browser(), this.engine = new Engine(), this.system = new System(), this.init(); console.log("Engine :" + this.engine.name + " " + this.engine.version); console.log("Browser:" + this.browser.name + " " + this.browser.version); console.log("System :" + this.system.name + " " + this.system.version); return {browser: this.browser, engine: this.engine, system: this.system}; }; Client.prototype = { init: function(){ this.judgeBrowser(); this.judgeSystem(); }, judgeBrowser: function() { var ua = navigator.userAgent.toString(); if (/AppleWebKit\/(\S+)/.test(ua)) { //匹配Webkit内核浏览器(Chrome、Safari、新Opera、新Konqueror) this.engine.name = "WebKit"; this.engine.version = RegExp["$1"]; if (/OPR\/(\S+)/.test(ua)) { //确定是不是引用了Webkit内核的Opera this.browser.name = "Opera"; this.browser.version = RegExp["$1"]; } else if (/Edge\/(\S+)/.test(ua)) { this.browser.name = "Edge"; this.browser.version = RegExp["$1"]; } else if (/Chrome\/(\S+)/.test(ua)) { //确定是不是Chrome this.browser.name = "Chrome"; this.browser.version = RegExp["$1"]; } else if (/konqueror\/(\S+)/.test(ua)) { // this.browser.name = "Konqueror"; this.browser.version = RegExp["$1"]; } else if (/Safari\/(\S+)/.test(ua)) { //确定是不是高版本(3+)的Safari this.browser.name = "Safari"; if (/Version\/(\S+)/.test(ua)) { this.browser.version = RegExp["$1"]; } else { //近似地确定低版本Safafi版本号 var SafariVersion = 1; var wk = parseFloat(engine.version); if (wk < 100) { SafariVersion = 1; } else if (wk < 312) { SafariVersion = 1.2; } else if (wk < 412) { SafariVersion = 1.3; } else { SafariVersion = 2; } this.browser.version = SafariVersion; } } } else if (window.opera) { //只匹配拥有Presto内核的老版本Opera 5+(12.15-) this.engine.name = "Presto"; this.browser.name = "Opera"; this.engine.version = this.browser.version = window.opera.version(); } else if (/Opera[\/\s](\S+)/.test(ua)) { //匹配不支持window.opera的Opera 5-或伪装的Opera this.engine.name = "Presto"; this.browser.name = "Opera"; this.engine.version = browser.version = RegExp["$1"]; } else if (/KHTML\/(\S+)/.test(ua)) { //KHTML内核 this.browser.name = "Konqueror"; this.engine.name = "KHTML"; this.engine.version = browser.version = RegExp["$1"]; } else if (/Konqueror\/([^;]+)/.test(ua)) { //Konqueror内核 this.browser.name = "Konqueror"; this.engine.name = "Konqueror"; this.engine.version = browser.version = RegExp["$1"]; } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)) { //判断是不是基于Gecko内核 this.engine.name = "Gecko"; this.engine.version = RegExp["$1"]; if (/Firefox\/(\S+)/.test(ua)) { //确定是不是Firefox this.browser.name = "Firefox"; this.browser.version = RegExp["$1"]; } } else if (/Trident\/([\d\.]+)/.test(ua)) { //确定是否是Trident内核的浏览器(IE8+) this.engine.name = "Trident"; this.engine.version = RegExp["$1"]; if (/rv\:([\d\.]+)/.test(ua) || /MSIE ([^;]+)/.test(ua)) { //匹配IE8-11+ this.browser.name = "IE"; this.browser.version = RegExp["$1"]; } } else if (/MSIE ([^;]+)/.test(ua)) { //匹配IE6、IE7 this.engine.name = "Trident"; this.engine.version = this.browser.version - 4.0; //模拟IE6、IE7中的Trident值 this.browser.name = "IE"; this.browser.version = RegExp["$1"]; } }, judgeSystem: function() { var ua = navigator.userAgent.toString(); var p = navigator.appVersion; //判断操作系统 this.system.name = p.indexOf("Win") != -1 ? "Windows" : this.system.name; this.system.name = p.indexOf("Mac") != -1 ? "Mac" : this.system.name; this.system.name = p.indexOf("like Mac") != -1 ? "like Mac" : this.system.name; // Android系统的判断需要在linux后面,因为Android的navigator.appVersion属性里包含Linux this.system.name = p.indexOf("Linux") != -1 ? (p.indexOf("Android") != -1 ? "Android" : "Linux") : p.indexOf("SunOS") != -1 ? "Solaris" : p.indexOf("FreeBSD") != -1 ? "FreeBSD" : p.indexOf("X11") != -1 ? "X11" : this.system.name; // 华为手机里面有linux和Android,所以放在后面,但不是所有华为手机都是HarmonyOS。。。。。所以这个要不要呢? // this.system.name = p.indexOf("HUAWEI") != -1 ? "HarmonyOS" : this.system.name; if (this.system.name == "Windows") { if (/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)) { if (RegExp["$1"] == "NT") { this.system.version = ({ "5.0": "2000", "5.1": "XP", "6.0": "Vista", "6.1": "7", "6.2": "8", "6.3": "8.1", "10.0": "10" })[RegExp["$2"]] || "NT " + RegExp["$2"]; } else if (RegExp["$1"] == "9x") { this.system.version = "ME"; } else { this.system.version = RegExp["$1"]; } } } } }; window.Client = Client; }(window, document))