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

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. 洛谷P4705 玩游戏(生成函数+多项式运算)

    题面 传送门 题解 妈呀这辣鸡题目调了我整整三天--最后发现竟然是因为分治\(NTT\)之后的多项式长度不是\(2\)的幂导致把多项式的值存下来的时候发生了一些玄学错误--玄学到了我\(WA\)的点全 ...

  2. [CF700E][JZOJ5558]Cool Slogan (后缀自动机+线段树)

    题意翻译 给出一个长度为$n$的字符串$s[1]$,由小写字母组成.定义一个字符串序列$s[1....k]$,满足性质:$s[i]$在$s[i-1]$ $(i>=2)$中出现至少两次(位置可重叠 ...

  3. 使用cookie下次自动登录

    登录时勾选了自动登录处理: 1.加密账号和IP,保存在cookie中,cookie('auto', $value, $time) 2.解密cookie,取出账号和上次IP,判断上次IP==当前IP.账 ...

  4. 复制订阅服务器和 AlwaysOn 可用性组 (SQL Server)

    https://docs.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/replication-subscri ...

  5. 基础篇:6)形位公差标注(GD&T标准)-总章

    本章目的:理解GD&T概念,读懂和绘制GD&T图纸.本章是GD&T指引章节. 1.GD&T概念 GD&T  是 Geometric  Dimensioning ...

  6. git克隆和上传项目

    软件环境: 1. VS2017 2. Git ver 2.17.0.1 3. gitee.com 目的: 已有的本地项目(新建)上传到码云,使本地可以和码云同步 尝试: 先在码云上建立项目,项目名称和 ...

  7. ThreadFactory类的使用

    之前创建线程的话,基本上是使用new Thread(),或者是将任务提交到线程池执行.今天看了一下洁城浩的<图解java多线程设计模式>突然看到还可以使用ThreadFactory来创建一 ...

  8. 06-oracle 通用函数

    --nvl(数字|列名,默认值) 数字或列的值为null显示为0,不为null时显示原值 --nvl2(comm,comm,0)如果comm不为null则显示comm,为null则显示0 --null ...

  9. XNA项目基础

    XNA项目基础 using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Frame ...

  10. mac下 mysql 插入中文乱码解决

    搞了好几个小时,终于搞定了 乱码根本原因还是编码方式不同造成的,只要编码方式统一就没问题 1. 进入 mysql 命令行, 用 show variables like 'character_set_% ...