做网站,js检测用户浏览器的版本,是经常要使用到,今天自己写了一个js,完成了对于一些常见浏览器的检测,但是,偏偏对于360浏览器的检测没有任 何办法,研究了一会儿,无果。无论是360安全浏览器,还是360极速浏览器,在极速模式下面,都只能检测到用户是使用的谷歌浏览器。后来在网上找了很 久,看了很多大神的帖子,结合了自己的想法,写出了下面的解决办法:
这是 BrowserCheck.html页面显示文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>浏览器检测</title> </head> <script> window. browserCheck(); } </script> <script src="jquery.min.js"></script> <script src="latest.js"></script> <script src="check.js"></script> <body> </body> </html>
这是Check.js显示文件,用来打印用户浏览器的版本号:
function browserCheck(){ var userAgent = navigator.userAgent, rMsie = /(msie\s|trident.*rv:)([\w.]+)/, rFirefox = /(firefox)\/([\w.]+)/, rOpera = /(opera).+version\/([\w.]+)/, rChrome = /(chrome)\/([\w.]+)/, rSafari = /version\/([\w.]+).*(safari)/; var browser; var version; var ua = userAgent.toLowerCase(); function uaMatch(ua) { var match = rMsie.exec(ua); if (match != null){ return { browser : "IE", version : match[2] || "0" }; } var match = rFirefox.exec(ua); if (match != null) { return { browser : match[1] || "", version : match[2] || "0" }; } var match = rOpera.exec(ua); if (match != null) { return { browser : match[1] || "", version : match[2] || "0" }; } var match = rChrome.exec(ua); if (match != null) { return { browser : match[1] || "", version : match[2] || "0" }; } var match = rSafari.exec(ua); if (match != null) { return { browser : match[1] || "", version : match[2] || "0" }; } if (match != null) { return { browser : "", version : "0" }; } } var browserMatch = uaMatch(userAgent.toLowerCase()); if (browserMatch.browser) { browser = browserMatch.browser; version = browserMatch.version; } var i=0; var s = $.ua().is360se; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用360安全浏览器Chrome内核,内核版本号:"+version); i=1; } var s = $.ua().is360ee; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用360极速浏览器Chrome内核,内核版本号:"+version); i=1; } var s = $.ua().isChrome; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用谷歌浏览器(原版),内核版本号:"+version); i=1; } var s = $.ua().isLiebao; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用猎豹浏览器chrome内核,内核版本号:"+version); i=1; } var s = $.ua().isLiebao; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用猎豹浏览器chrome内核,内核版本号:"+version); i=1; } var s = $.ua().isSougou; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用搜狗浏览器chrome内核,内核版本号:"+version); i=1; } var s1 = $.ua().isIe; if(s1==true){ var s2 = $.ua().ie; document.write("用户浏览器版本检测——by Mona_侠快:你正在使用IE浏览器,内核版本号:"+version); if(s2<8){ alert("用户浏览器版本检测——by Mona_侠快:您使用的浏览器在IE8.0以下,为了您获得良好的上网体验,强烈建议您升级您的IE,或者使用360安全浏览器!"); } i=1; } var s = $.ua().isFirefox;; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用firefox浏览器,内核版本号:"+version); i=1; } var s = $.ua().isMobile; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用手机版浏览器"); i=1; } var s = $.ua().isTablet; if(s==true){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用平板浏览器"); i=1; } if(i==0){ document.write("用户浏览器版本检测——by Mona_侠快:你正在使用的是"+browser+"浏览器"+"内核版本号:"+version); } } // JavaScript Document
其中有一个jquery插件jquery.min.js,请到附件中下载^_^!
附件中包含了这几个文件。
这个latest.js是用来检测浏览器版本的:
/** * 1. 获取ua字符串 * $.ua().ua; * * 2. 设置ua字符串 * $.ua("string"); * * 3. 获取参数 * $.ua().platform; * $.ua().browser; * $.ua().engine; * * 4. 内核判断 * $.ua().isWebkit; * $.ua().isGecko; * $.ua().isTrident; * * 4. 外壳判断 * $.ua().isChrome; * $.ua().isFirefox; * $.ua().is360se; * $.ua().is360ee; * $.ua().isLiebao; * $.ua().isSougou; * $.ua().ie; * $.ua().isIe; * $.ua().isIe6; * $.ua().isIe7; * $.ua().isIe8; * $.ua().isIe9; * $.ua().isIe10; * $.ua().isIe11; */ ; (function ($, win, undefined) { var UA = win.navigator.userAgent, doc = win.document, parseRule = { platforms: [ // windows phone { name: ‘windows phone‘, versionSearch: ‘windows phone os ‘, versionNames: [ // windows phone must be tested before win { number: ‘7.5‘, name: ‘mango‘ } ] }, // windows { name: ‘win‘, slugName: ‘windows‘, versionSearch: ‘windows(?: nt)? ‘, versionNames: [{ number: ‘6.2‘, name: ‘windows 8‘ }, { number: ‘6.1‘, name: ‘windows 7‘ }, { number: ‘6.0‘, name: ‘windows vista‘ }, { number: ‘5.2‘, name: ‘windows xp‘ }, { number: ‘5.1‘, name: ‘windows xp‘ }, { number: ‘5.0‘, name: ‘windows 2000‘ }] }, // ipad { name: ‘ipad‘, versionSearch: ‘cpu os ‘, flags: [‘ios‘] }, // ipad and ipod must be tested before iphone { name: ‘ipod‘, versionSearch: ‘iphone os ‘, flags: [‘ios‘] }, // iphone { name: ‘iphone‘, versionSearch: ‘iphone os ‘, flags: [‘ios‘] }, // iphone must be tested before mac { name: ‘mac‘, versionSearch: ‘os x ‘, versionNames: [{ number: ‘10.8‘, name: ‘mountainlion‘ }, { number: ‘10.7‘, name: ‘lion‘ }, { number: ‘10.6‘, name: ‘snowleopard‘ }, { number: ‘10.5‘, name: ‘leopard‘ }, { number: ‘10.4‘, name: ‘tiger‘ }, { number: ‘10.3‘, name: ‘panther‘ }, { number: ‘10.2‘, name: ‘jaguar‘ }, { number: ‘10.1‘, name: ‘puma‘ }, { number: ‘10.0‘, name: ‘cheetah‘ }] }, // android { name: ‘android‘, versionSearch: ‘android ‘, versionNames: [ // android must be tested before linux { number: ‘4.1‘, name: ‘jellybean‘ }, { number: ‘4.0‘, name: ‘icecream sandwich‘ }, { number: ‘3.‘, name: ‘honey comb‘ }, { number: ‘2.3‘, name: ‘ginger bread‘ }, { number: ‘2.2‘, name: ‘froyo‘ }, { number: ‘2.‘, name: ‘eclair‘ }, { number: ‘1.6‘, name: ‘donut‘ }, { number: ‘1.5‘, name: ‘cupcake‘ } ] }, // blackberry { name: ‘blackberry‘, versionSearch: ‘(?:blackberry\\d{4}[a-z]?|version)/‘ }, // blackberry { name: ‘bb‘, slugName: ‘blackberry‘, versionSearch: ‘(?:version)/‘ }, // blackberry { name: ‘playbook‘, slugName: ‘blackberry‘, versionSearch: ‘(?:version)/‘ }, // linux { name: ‘linux‘ }, // nokia { name: ‘nokia‘ } ], browsers: [{ name: ‘iemobile‘, versionSearch: ‘iemobile/‘ }, // iemobile must be tested before msie { name: ‘msie‘, slugName: ‘ie‘, versionSearch: ‘msie ‘ }, { name: ‘firefox‘, versionSearch: ‘firefox/‘ }, { name: ‘chrome‘, versionSearch: ‘chrome/‘ }, // chrome must be tested before safari { name: ‘safari‘, versionSearch: ‘(?:browser|version)/‘ }, { name: ‘opera‘, versionSearch: ‘version/‘ } ], engines: [{ name: ‘trident‘, versionSearch: ‘trident/‘ }, { name: ‘webkit‘, versionSearch: ‘webkit/‘ }, // webkit must be tested before gecko { name: ‘gecko‘, versionSearch: ‘rv:‘ }, { name: ‘presto‘, versionSearch: ‘presto/‘ } ] }, // [10,)版本就无法判断 ieVer = (function () { var v = 3, p = doc.createElement(‘p‘), all = p.getElementsByTagName(‘i‘); while ( p.innerHTML = ‘<!--[if gt IE ‘ + (++v) + ‘]><i></i><![endif]-->‘, all[0]); return v > 4 ? v : 0; }()), ieAX = win.ActiveXObject, ieMode = doc.documentMode, isIe = ieAX || ieMode, isIe6 = (ieAX && ieVer == 6) || (ieMode == 6), isIe7 = (ieAX && ieVer == 7) || (ieMode == 7), isIe8 = (ieAX && ieVer == 8) || (ieMode == 8), isIe9 = (ieAX && ieVer == 9) || (ieMode == 9), isIe10 = ieMode === 10, isIe11 = ieMode === 11, isChrome = !isIe && _mime("type", "application/vnd.chromium.remoting-viewer"), isLiebao = !isIe && !! win.external && !! win.external.LiebaoAutoFill_CopyToClipboard, is360ee = !isIe && !isChrome && !isLiebao && _plugins("filename", "pepflashplayer.dll"), is360se = !isIe && !is360ee && _mime("suffixes", "dll", "description", /fancy/), isSougou = !isIe && _plugins("filename", "NPComBrg310.dll"), isFirefox = win.scrollMaxX !== undefined; if (isIe6) { ieVer = 6; } else if (isIe7) { ieVer = 7; } else if (isIe8) { ieVer = 8; } else if (isIe9) { ieVer = 9; } else if (isIe10) { ieVer = 10; } else if (isIe11) { ieVer = 11; } $.extend({ ua: function () { var args = arguments, argL = args.length, ua = (argL == 1 && $.type(args[0]) == "string" ? args[0] : UA).toLowerCase(), objPlatform = _parse(parseRule.platforms, ua), objBrowser = _parse(parseRule.browsers, ua, true), objEngine = _parse(parseRule.engines, ua); return { // 返回ua字符串 ua: ua, // 操作平台 platform: $.extend({}, objPlatform, { os: win.navigator.platform.toLowerCase(), plugins: win.navigator.plugins }), // 浏览器内核 engine: objEngine, // 浏览器外壳 browser: objBrowser, // ie isIe: !! ieVer, isIe6: isIe6, isIe7: isIe7, isIe8: isIe8, isIe9: isIe9, isIe10: isIe10, isIe11: isIe11, ie: ieVer, // 内核 isWebkit: !! objEngine.isWebkit, isGecko: !! objEngine.isGecko, isTrident: !! objEngine.isTrident, // 外壳[优先特征判断] isChrome: isChrome, is360ee: is360ee, is360se: is360se, isSougou: isSougou, isLiebao: isLiebao, isFirefox: isFirefox, // 类型 isMobile: objPlatform.isMobile, isTablet: objPlatform.isTablet, isDesktop: objPlatform.isDesktop }; } }); /** * 解析 * 参考:https://github.com/terkel/jquery-ua * @param {Array} 需要解析的数据 * @param {String} 需要解析的ua字符串 * @param {Boolean} 是否为解析浏览器数据 * @return {Object} 解析后的对象 * @version 1.0 * 2013年9月27日13:36:47 */ function _parse(rule, ua, isBrowser) { var item = {}, name, versionSearch, flags, versionNames, i, is, ic, j, js, jc; if (isBrowser && ieVer) { return { name: "ie", ie: true, version: ieVer, isIe: true } } for (i = 0, is = rule.length; i < is; i++) { ic = rule[i]; name = ic.name; versionSearch = ic.versionSearch; flags = ic.flags; versionNames = ic.versionNames; if (ua.indexOf(name) !== -1) { item.name = name.replace(/\s/g, ‘‘); if (ic.slugName) { item.name = ic.slugName; } item["is" + _upperCase1st(item.name)] = true; item.version = (‘‘ + (new RegExp(versionSearch + ‘(\\d+((\\.|_)\\d+)*)‘).exec(ua) || [, 0])[1]).replace(/_/g, ‘.‘); if (flags) { for (j = 0, js = flags.length; j < js; j++) { item["is" + _upperCase1st(flags[j])] = true; } } if (versionNames) { for (j = 0, js = versionNames.length; j < js; j++) { jc = versionNames[j]; if (item.version.indexOf(jc.number) === 0) { item.fullname = jc.name; item["is" + _upperCase1st(item.fullname)] = true; break; } } } if (rule === parseRule.platforms) { item.isMobile = /mobile|phone/.test(ua) || item.isBlackberry; item.isMobile = item.isMobile === undefined ? false : true; item.isTablet = /tablet/.test(ua) || item.isIpad || (item.isAndroid && !/mobile/.test(ua)); item.isTablet = item.isTablet === undefined ? false : true; if (item.isTablet) item.isMobile = false; item.isDesktop = !item.isMobile && !item.isTablet ? true : false; if (item.ios) { item.fullname = ‘ios‘ + parseInt(item.version, 10); item["is" + _upperCase1st(item.fullname)] = true; } } break; } } if (!item.name) { item[‘isUnknown‘] = true; item.name = ‘‘; item.version = ‘‘; } return item; } // 大写第一个字母 function _upperCase1st(string) { return string.replace(/^(\w)/, function (w) { return w.toUpperCase() }); } // 测试mime function _mime(where, value, name, nameReg) { var mimeTypes = win.navigator.mimeTypes, i; for (i in mimeTypes) { if (mimeTypes[i][where] == value) { if (name !== undefined && nameReg.test(mimeTypes[i][name])) return true; else if (name === undefined) return true; } } return false; } // 测试plugins function _plugins(where, value) { var plugins = win.navigator.plugins, i; for (i in plugins) { if (plugins[i][where] == value) return true; } return false; } })(jQuery, this);
转载:http://xiakuai.blog.51cto.com/8682834/1371459
时间: 2024-10-28 20:36:32