本文主要是针对各种客户端进行检测,使用了用户代理字符串检测技术,具体代码如下:

var client=function() {
var engine= {
// 呈现引擎
ie: 0, gecko: 0, webkit: 0, khtml: 0, opera: 0, //其他版本号
ver: null
}
;
var browser= {
// 浏览器
ie: 0, firefox: 0, safari: 0, konq: 0, opera: 0, chrome: 0, // 其他的版本
ver: null
}
;
var system= {
win: false, mac: false, xll: false, // 移动设备
iphone: false, ipod: false, ipad: false, ios: false, android: false
}
; // 在此检测呈现引擎,平台和设备
return {
engine: engine, browser: browser, system: system
}
;
} ();//( )函数将参数传递来的字符串中的十六进制码转换成 ASCII 码并返回,它完成 escape( ) 函数的逆操作。
var engine=client;
var browser=client;
var ua=navigator.userAgent.toLowerCase();
if(ua.match(/opr/([d.]+)/) || window.opera) {
var result=ua.match(/opr/([d.]+)/);
engine.ver=browser.ver=result[1];
engine.opera=browser.opera=parseFloat(engine.ver);
if(window.opera) {
engine.ver=browser.ver=window.opera.version();
engine.opera=browser.opera=parseFloat(engine.ver);
}
} else if(/applewebkit/(S+)/.test(ua)) {
engine.ver=RegExp["$1"];
engine.webkit=parseFloat(engine.ver); // 确定是chrome还是safari
/* * chrome用户代理字符串 * Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) * Chrome/42.0.2311.152 Safari/537.36 */ if(/chrome/(S+)/.test(ua)) {
browser.ver=RegExp["$1"];
browser.chrome=parseFloat(browser.ver);
}
else if(/version/(S+)/.test(ua)) {
/* * safari用户代理字符串 * Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) * Version/5.1.7 Safari/534.57.2 */ 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)) {
engine.ver=browser.ver=RegExp["$1"];
engine.khtml=browser.konq=parseFloat(engine.ver);
} else if(/rv:([^)]+)) gecko/d {
8
} /.test(ua)) {
engine.ver=RegExp["$1"];
engine.gecko=parseFloat(engine.ver);
/* * firefox的用户代理的字符串 * Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) * Gecko/20100101 Firefox/38.0 */ // 确定是不是firefox
if(/firefox/(S+)/.test(ua)) {
browser.ver=RegExp["$1"];
browser.firefox=parseFloat(browser.ver);
}
} else if (/msie ([^;
]+)/.test(ua) || "ActiveXObject" in window) {
if("ActiveXObject" in window) {
if(/msie ([^;
]+)/.test(ua)) {
engine.ver=browser.ver=RegExp["$1"];
engine.ie=browser.ie=parseFloat(engine.ver);
}
else {
if(/rv: ([^)]+))/.test(ua)) {
engine.ver=browser.ver=RegExp["$1"];
engine.ie=browser.ie=parseFloat(engine.ver);
}
}
}
} // 检测平台
var system=client;
var platform=navigator.platform;
system.win=platform.indexOf("Win")==0;
system.mac=platform.indexOf("Mac")==0;
system.x11=(platform.indexOf("X11")==0) || (platform.indexOf("Linux")==0); // 移动设备
system.iphone=ua.indexOf("iphone") > -1;
system.ipod=ua.indexOf("ipod") > -1;
system.ipad=ua.indexOf("ipad") > -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);
}

  参考网址

JavaScript之如何对客户端进行检测的更多相关文章

  1. 从客户端中检测到有潜在危险的 request.form值[解决方法]

    当页面编辑或运行提交时,出现“从客户端中检测到有潜在危险的request.form值”问题,该怎么办呢?如下图所示: 下面博主汇总出现这种错误的几种解决方法:问题原因:由于在asp.net中,Requ ...

  2. 当页面编辑或运行提交时,出现“从客户端中检测到有潜在危险的request.form值”问题,该怎么办呢?

    最近在学习highcharts时,关于其中的导出功能,本来是想把导出的图片存放在本地,发现只有在电脑联网的情况下才可以一下导出图片,后来查阅了一番资料,才发现highcharts中的导出默认的官网服务 ...

  3. WebForm从客户端中检测到有潜在危险的Request.Form 值的处理办法

    从客户端中检测到有潜在危险的 Request.Form 值由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值.立马报错上面的错误. 如:在网页的Te ...

  4. 从客户端中检测到有潜在危险的 Request.Form 值 方法

    由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值.立马报出“从客户端 中检测到有潜在危险的Request.Form值”这样的错. 解决方案一:   ...

  5. 从客户端中检测到有潜在危险的 request.form值 以及 request.querystring[解决方法]

    一.从客户端中检测到有潜在危险的request.form值 当页面编辑或运行提交时,出现“从客户端中检测到有潜在危险的request.form值”问题,该怎么办呢?如下图所示: 下面博主汇总出现这种错 ...

  6. [转]从客户端中检测到有潜在危险的 Request.Form 值。

    参考资料: ASP.NET 4.0中使用FreeTextBox和FCKeditor遇到安全问题警告的解决办法关于问题出现的原因说的很清楚 引言 本人在.NET 4.0+VS2010环境下调试一个ASP ...

  7. 【记录】从客户端()中检测到有潜在危险的 Request.Path 值。

    从客户端()中检测到有潜在危险的 Request.Path 值. 错误信息: Application_Error Url: www.cnblogs.com/%E5%BA%.... UserAgent: ...

  8. 从客户端(&)中检测到有潜在危险的 Request.Path 值

    首先,这个问题出现在 ASP.NET MVC 应用程序中,所以下面的解决方式都是在这个环境下. 关于这个问题,网上又很多的答案,当时也搜了一些: A potentially dangerous Req ...

  9. 从客户端中检测到有潜在危险的Request.Form 值

    今天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&q ...

随机推荐

  1. SFML从入门到放弃(1) 窗口和交互

    SFML从入门到放弃(1) 窗口和交互 创建一个新窗口: sf::RenderWindow window(sf::VideoMode(,),"new window"); 但是光创建 ...

  2. kali linux之拒绝服务攻击工具

    hping3 几乎可以定制发送任何TCP/IP数据包,用于测试FW,端口扫描,性能测试 -c - 计数包计数  -i - interval wait(uX表示X微秒,例如-i u1000)       ...

  3. The server of Nginx(三)——Nginx企业级优化

    相信看过我之前apache文章的朋友们,对服务优化也有了一个大概的了解,相比较而言,Nginx企业中应用的更多一些,因此今天也会详细阐述Nginx的优化,有人说,服务器不需要优化,开虚拟化,分分钟成倍 ...

  4. 范围for、new内存动态分配、nullptr

    一.范围for语句:用于遍历一个序列 ,,,,}; for(auto &x : v) // 省了拷贝的动作,提高了系统效率 { cout << x << endl; } ...

  5. Jmeter实例

    我们在性能测试过程中,首先应该去设计测试场景,模拟真实业务发生的情境,然后针对这些场景去设计测试脚本.为了暴露出性能问题,要尽可能的去模拟被测对象可能存在瓶颈的测试场景. 我在本地部署了一个项目,可以 ...

  6. SQL数据库正在恢复 查看进度

    在使用SQL的过程中.. 开启一个事务..进行大计算量..在中间出错或者强制杀死SQL服务进程..总之事务没有提交.. 再次开启时sql会进入自动检查的过程.. 数据库小的话问题不大..会比较快.. ...

  7. 那些H5用到的技术(4)——弹幕

    前言思路实现模式无限循环模式时间线模式停止显示弹幕 前言 以前玩卷轴射击游戏的时候,大量的BOSS子弹让我们无路可逃的时候,让我见识到了真正弹幕的威力,可自从A站B站火了之后,大量评论留言参与到了视频 ...

  8. springboot+自定义注解实现灵活的切面配置

    利用aop我们可以实现业务代码与系统级服务例如日志记录.事务及安全相关业务的解耦,使我们的业务代码更加干净整洁. 最近在做数据权限方面的东西,考虑使用切面对用户访问进行拦截,进而确认用户是否对当前数据 ...

  9. Oracle 数据库管理员及管理员的作用

    以下测试实例均在Oracle11gr2下测试!!! 一.简介:每个Oracle数据库应该至少有一名数据库管理员(dba),对于一个小的数据库,一个dba就够了,但是对于一个大的数据库,可能需要多个db ...

  10. ETL 工具下载全集 包括 Informatica Datastage Cognos( 持续更新)

    Datastage 8.0 BT种子下载:http://files.cnblogs.com/taven/Datastage_8.0.rar Informatica PowerCenter 8.6.0 ...