js+jquery检测用户浏览器型号(包括对360浏览器的检测)
做网站,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
js+jquery检测用户浏览器型号(包括对360浏览器的检测)的更多相关文章
- 使用JS&jQuery改善用户体验
第一章 JavaScript基本语法 一.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&= ...
- jsonP 现在360浏览器竟然阻止本机 jquery load一些html js什么的
别的浏览器正常可以jquery.load本机文件,但是360浏览器不行了,缺德啊!! jsonP代码 index3.html <!DOCTYPE HTML PUBLIC "-//W3C ...
- adblockTester通过js检测用户浏览器是否安装了AdBlock
adblockTester 简介 首先有必要介绍一下AdBlock,它是一款知名网页广告屏蔽插件,在各大主流浏览器上均有AdBlock插件. AdBlock为用户带来了一片蓝天,却苦了站长,尤其是苦逼 ...
- js检测浏览器型号
公司要求做内部统计,要求监控客服玩游戏使用的浏览器的型号,是火狐的.谷歌的.还是IE的等等. [code lang="javascript"] /**** * 目前识别范围 * M ...
- VSCode调试Html中的脚本 vscode前端常用插件推荐,搭建JQuery、Vue等开发环境 vsCode 添加浏览器调试和js调试的方法总结 VS Code - Debugger for Chrome调试js
一.背景 使用Visual Studio Code写了一个简单的Html页面,想调试下其中script标签里的javascript代码,网上查了一通,基本都是复制粘贴或者大同小异的文章,就是要安装De ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- 通过JS检测360浏览器
如何通过JS检测360浏览器? 尝试了一大堆方法,网上大多数办法都是通过navigator.userAgent来判断,这可能在几年前是行得通的,现在360userAgent输出来跟谷歌除了版本号其余一 ...
- js/jquery判断浏览器的方法小结
在网站前端开发中,浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道.今天我们把 ...
- js/jQuery判断浏览器名称、内核版本、浏览器壳
1.js方法 /* 判断浏览器名称和版本 目前只能判断:ie/firefox/chrome/opera/safari 2012年5月16日23:47:08 浏览器内核UA:UA; 浏览器内核名称:NV ...
随机推荐
- Android FM模块学习之二 FM搜索频率流程
上一篇大概分析了一下FM启动流程,若不了解Fm启动流程的,能够去打开前面的链接先了解FM启动流程,接下来我们简单分析一下FM的搜索频率流程. 在了解源代码之前.我们先看一下流程图: 事实上从图中能够看 ...
- asp.net C#母版页和内容页事件排版载入顺序生命周期
asp.net C#母版页和内容页事件排版载入顺序生命周期 关于ASP页面Page_Load发生在事件之前而导致的问题已经喜闻乐见,对于问题的解释也非常全面.可是怎样解决这个问题则较少有人说明,我就再 ...
- xcode针对不同IOS版本的代码编译问题
有时候在项目中为了兼容低版本IOS系统,通常会针对不同的OS版本写不同的代码,例如: #define IS_IOS7_OR_LATER ([[UIDevice currentDevice].syste ...
- mysql 服务器ip连接统计
有的时候数据库服务器连接数过大,也没有慢sql,想知道哪些应用服务器连接上来的比较多,下面的命令轻松搞定 netstat -tnp|grep ESTABLISHED|awk '{ print $5 } ...
- android 98 MediaPlayer+SurfaceView播放视频
package com.itheima.videoplayer; import java.io.IOException; import android.media.MediaPlayer; impor ...
- systemtap 列出所有linux 内核模块与相关函数0
diskiohttp://blog.163.com/digoal%40126/blog/static/16387704020131015105532435/ [root@localhost linux ...
- Webstorm 不识别es6 import React from ‘react’——webstorm不支持jsx语法怎么办
2016-10-31更新 webstorm不支持es6语法怎么办? webstorm不支持jsx语法怎么办? 参考:webstorm不支持jsx语法怎么办 I spent ages trying to ...
- 自己写的demo---equals()跟==的区别
package equals; /*public class equals { //基本数据类型跟引用数据类型(复合数据类型), //在引用数据类型中equals方法被重写,一般用来比较内存地址 pu ...
- 面试相关的技术问题---java基础
最近在准备秋季校招,将一些常见的技术问题做一个总结!希望对大家有所帮助! 1.面向对象和面向过程的区别是什么? 面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描 ...
- (转)ASP.NET禁用刷新重复提交Backspace键
在网页制作中,由于Backspace键可以回退到上一个网页,利用了缓存的数据,从而导致一些错误发生.浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用.但有时候我们不得不关闭这个功 ...