当前位置: 首页 > news >正文

javascript 检测浏览器类型和版本的代码

为什么80%的码农都做不了架构师?>>>   hot3.png

方法1:对象/特征检测法

该方法是一种判断浏览器能力(而非浏览器的确切型号)的通用方法。大部分JS专家认为这个方法最合适,因为他们认为按照该方法所编写的脚本是经得起未来考验的。

//获取IE浏览器的版本号
//返回数值,显示IE的主版本号
function getIEVer() {
var ua = navigator.userAgent; //获取用户端信息
var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置
if (b < 0) {
return 0;
}
return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值
}
alert(getIEVer()); //返回数值8(我的IE8)

如果更关注浏览器的能力而不在乎它实际的身份,就可以使用这种方法。

方法2:user-agent字符串检测法

user-agent字符串提供了关于Web浏览器的大量信息,包括浏览器的名称和版本。

var ua = navigator.userAgent.toLowerCase(); //获取用户端信息
var info = {
ie: /msie/.test(ua) && !/opera/.test(ua), //匹配IE浏览器
op: /opera/.test(ua), //匹配Opera浏览器
sa: /version.*safari/.test(ua), //匹配Safari浏览器
ch: /chrome/.test(ua), //匹配Chrome浏览器
ff: /gecko/.test(ua) && !/webkit/.test(ua) //匹配Firefox浏览器
};
(info.ie) && alert("IE浏览器");
(info.op) && alert("Opera浏览器");
(info.sa) && alert("Safari浏览器");
(info.ff) && alert("Firefox浏览器");
(info.ch) && alert("Chrome浏览器");

通常我们做得最多的,就是判断是否是IE了,其它几种浏览器一般都会符合标准.有些客户只需要符合IE和FF就已经满足了.那么我们可以这样做:

var isIE = (navigator.appName == "Microsoft Internet Explorer");

判断IE远远不止上面一种方法,可以使用IE更多特有的东西,如:window.ActiveXObject,document.all等,这些都属于对象/特征检测法了!通常要在不同的浏览器上写不同的样式(因为IE样式解析也各有不同),那就得判断版本了.可以这样做

//获取IE浏览器的版本号
//返回数值,显示IE的主版本号
function getIEVer() {
var ua = navigator.userAgent; //获取用户端信息
var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置
if (b < 0) {
return 0;
}
return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值
}
alert(getIEVer()); //返回数值7
方法3:检测操作系统:
var isWin = (navigator.userAgent.indexOf("Win") != -1); //如果是Windows系统,则返回true
var isMac = (navigator.userAgent.indexOf("Mac") != -1); //如果是Macintosh系统,则返回true
var isUnix = (navigator.userAgent.indexOf("X11") != -1); //如果是Unix系统,则返回true
var isLinux = (navigator.userAgent.indexOf("Linux") != -1); //如果是Linux系统,则返回true
文章大部分内容来自于《Javascript征途》

转载于:https://my.oschina.net/wzzz/blog/140952

相关文章:

  • MVC调试异常--未能将脚本调试器附加到计算机
  • 关于全国软考“ 网络工程师” 证书的备考的建议
  • excel快捷键如下:
  • [置顶] How to compile openjdk 7 in RHEL5
  • Qt Creator 代码自动补全设置
  • 自己写中文分词器之(一)_逆向最大匹配算法的实现
  • centos5.8安装Mysqldb
  • shadow projection
  • STM32学习笔记(5):通用定时器PWM输出
  • 产品经理如何在技术人员面前更有说服力?
  • PHP autoload机制详解
  • linux系统编程之文件与IO:文件描述符、open,close
  • Knockout 新版应用开发教程之创建view models与监控属性
  • 将不确定变为确定~DateTime.MinValue和MaxValue引发的异常
  • java文件操作源码
  • Fundebug计费标准解释:事件数是如何定义的?
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Git的一些常用操作
  • Java比较器对数组,集合排序
  • JSONP原理
  • Median of Two Sorted Arrays
  • Python实现BT种子转化为磁力链接【实战】
  • QQ浏览器x5内核的兼容性问题
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Terraform入门 - 3. 变更基础设施
  • windows下mongoDB的环境配置
  • 编写高质量JavaScript代码之并发
  • 测试如何在敏捷团队中工作?
  • 工作手记之html2canvas使用概述
  • 时间复杂度与空间复杂度分析
  • 实现菜单下拉伸展折叠效果demo
  • 我的业余项目总结
  • 物联网链路协议
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (23)Linux的软硬连接
  • (vue)页面文件上传获取:action地址
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (三分钟)速览传统边缘检测算子
  • (一一四)第九章编程练习
  • (转)我也是一只IT小小鸟
  • ***监测系统的构建(chkrootkit )
  • .bat批处理出现中文乱码的情况
  • .Net 6.0 处理跨域的方式
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET企业级应用架构设计系列之结尾篇
  • .NET上SQLite的连接
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .so文件(linux系统)
  • .sys文件乱码_python vscode输出乱码
  • @Builder用法