好程序员web前端培训分享如何用js检测浏览器类型

简介:

  这个需求在前端开发当中是很常见的,大家都知道我们写的js或css在浏览器中是有兼容问题的,当下虽然大家可能不用感受的IE6带来的痛苦(别问我为什么是痛苦),但是你负责的项目本身就是政府、医院之类的项目,这个时候还是得受兼容问题的困扰。
  解决方案一:老老实实的在写html、css和js的时候就考虑兼容的问题,边写边测试,完成后自然就是兼容的了。这就需要你下载各种浏览器,IE浏览器就用IETester测试(IETester是一个免费的Web浏览器调试工具 ),IETester的坑非常多,根本不准,真实IE6还是会出bug(哭),后面学乖了,安装虚拟机,虚拟机里面装XP,XP自带了IE6,做好还用真的浏览器测试一下。这种方法花费的精力蛮多的,你自己搜索一下IE6/7/8的css兼容问题就明白了,所以还是用方法二吧。
  解决方案二:直接检测浏览器类型和版本,给出提示信息,直接让用户不用IE打开就行,那就是让用户升级浏览器了,一劳永逸的方法。效果如下所示:
js_

具体的实现方法也比较简单,JavaScript 包含一个名为 Navigator 的对象 ,Navigator 包含了有关访问者浏览器的信息,包括浏览器类型、版本等等 。Navigator对象里面含有两个重要的属性,appName (保存浏览器类型 ),appVersion (保存有浏览器的版本信息 )。下面我们用代码来测试一下:

var browser = navigator.appName;//获取浏览器名字    var b_version = navigator.appVersion;//获取浏览器版本信息    var version = parseFloat(b_version);//提取浏览器版本号​
document.write("浏览器名称是: " + browser)//浏览器名称是: Netscape    document.write("<br />")
document.write("浏览器版本是: " + version)//浏览器版本是: 5</script>

上面例子中的 browser 变量存有浏览器的名称,比如,非IE显示"Netscape" 或者 IE显示"Microsoft Internet Explorer" ,所以只能判别是IE还是非IE,如果你是想让用户不用IE浏览器,这样也可以了。这里要注意一点,IE的版本号是有点问题的,IE4/5/6的版本号都是4.0,所以我们就可以做到:如果用户使用的是IE6或以下版本,请用户升级浏览器。

function detectBrowser() {
    var browser = navigator.appName//获取浏览器名字        var b_version = navigator.appVersion//获取浏览器版本信息        var version = parseFloat(b_version)//提取浏览器版本号​
    if ((browser == "Netscape" || browser == "Microsoft Internet Explorer")
        && (version >= 4)) {
        console.log('非IE浏览器,能访问页面');
    }
    else { alert("优秀的小伙伴都选择切换其他浏览器或升级IE浏览器了哦") }
}​
detectBrowser();//调用函数,判别浏览器,如果是IE低版本提示用户升级</script>

当然,如果你想判别具体是哪种浏览器,那还得利用Navigator 的对象的userAgent属性,比如:
var userAgent = navigator.userAgent;console.log(userAgent);
这里打印的是:Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0 ,
用火狐测试;只要我们判断这段字符串里面包含Firefox就可以判断当下我们就是用火狐浏览器了,同样的方法我们可以用来检测各个浏览器:
function getBrowserType(){
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var browser='unknown';
if (userAgent.indexOf("IE")!=-1) {//字符串含有IE字段,表明是IE浏览器 browser="IE";
}else if(userAgent.indexOf('Firefox')!=-1){//字符串含有Firefox字段,表明是火狐浏览器 browser="Firefox";
}else if(userAgent.indexOf('OPR')!=-1){//Opera browser="Opera";
}else if(userAgent.indexOf('Chrome')!=-1){//Chrome browser="Chrome";
}else if(userAgent.indexOf('Safari')!=-1){//Safari browser="Safari";
}else if(userAgent.indexOf('Trident')!=-1){//IE内核 browser='IE 11';
}
return browser;}
如果你还想进一步判断IE浏览器的版本 ,比如:edge,ie11,10,9,8,7,6,5,4 ,代码如下:
// 获取IE版本function IEVersion() {
// 取得浏览器的userAgent字符串 var userAgent = navigator.userAgent;
// 判断是否为小于IE11的浏览器 var isLessIE11 = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;
// 判断是否为IE的Edge浏览器 var isEdge = userAgent.indexOf('Edge') > -1 && !isLessIE11;
// 判断是否为IE11浏览器 var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;
if (isLessIE11) {

var IEReg = new RegExp('MSIE (\\d+\\.\\d+);');
// 正则表达式匹配浏览器的userAgent字符串中MSIE后的数字部分,,这一步不可省略!!!    IEReg.test(userAgent);
// 取正则表达式中第一个小括号里匹配到的值    var IEVersionNum = parseFloat(RegExp['$1']);
if (IEVersionNum === 7) {
  // IE7      return 7
} else if (IEVersionNum === 8) {
  // IE8      return 8
} else if (IEVersionNum === 9) {
  // IE9      return 9
} else if (IEVersionNum === 10) {
  // IE10      return 10
} else {
  // IE版本<7      return 6
}

} else if (isEdge) {

// edge    return 'edge'

} else if (isIE11) {

// IE11    return 11

} else {

// 不是ie浏览器    return -1

}}
综合上面的方法,我们就可以回到今天的主题啦,我们的需求是:如果用户使用的是IE5/6/7/8,提示用户升级或切换其他浏览器:
第一步:声明一个函数(可以判断各个浏览器和版本)
function getBroswerAndVersion(){//该函数可以判断各种浏览器和版本,最厉害的版本 var os = navigator.platform;
var userAgent = navigator.userAgent;
var info = "";
var tempArray = "";
//判断浏览器版本 var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器 var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器 var isEdge = userAgent.toLowerCase().indexOf("edge") > -1 && !isIE; //判断是否IE的Edge浏览器 var isIE11 = (userAgent.toLowerCase().indexOf("trident") > -1 && userAgent.indexOf("rv") > -1);

if (/[Ff]irefox(/d+.d+)/.test(userAgent)) {

tempArray = /([Ff]irefox)\/(\d+\.\d+)/.exec(userAgent); 
info += tempArray[1] + tempArray[2]; 

} else if (isIE) {

var version = ""; 
var reIE = new RegExp("MSIE (\\d+\\.\\d+);"); 
reIE.test(userAgent); 
var fIEVersion = parseFloat(RegExp["$1"]); 
if (fIEVersion == 7) 
{ version = "IE7"; } 
else if (fIEVersion == 8) 
{ version = "IE8"; } 
else if (fIEVersion == 9) 
{ version = "IE9"; } 
else if (fIEVersion == 10) 
{ version = "IE10"; } 
else
{ version = "0" } 

info += version; 

} else if (isEdge) {

info += "Edge"; 

} else if (isIE11) {

info += "IE11"; 

} else if (/[Cc]hrome/d+/.test(userAgent)) {

tempArray = /([Cc]hrome)\/(\d+)/.exec(userAgent); 
info += tempArray[1] + tempArray[2]; 

} else if (/[Vv]ersion/d+.d+.d+(.d) [Ss]afari/.test(userAgent)) {

tempArray = /[Vv]ersion\/(\d+\.\d+\.\d+)(\.\d)* *([Ss]afari)/.exec(userAgent); 
info += tempArray[3] + tempArray[1]; 

} else if (/[Oo]pera.+[Vv]ersion/d+.d+/.test(userAgent)) {

tempArray = /([Oo]pera).+[Vv]ersion\/(\d+)\.\d+/.exec(userAgent); 
info += tempArray[1] + tempArray[2]; 

} else {

info += "unknown"; 

}
return info;}
第二步:调用函数,得到的结果再判断给用户提示即可
var bro = getBroswerAndVersion();//上面第一步封装的函数,调用会得到一个返回值if(bro=="IE5" || bro=="IE6" || bro=="IE7" || bro=="IE8" ){
alert("浏览器版本过低!请升级至IE9以上");//此处应该显示一个漂亮的图片,让用户觉得再不升级就是out了}

相关文章
|
9天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
9天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
10天前
|
编解码 前端开发 JavaScript
Web 前端开发中的最佳实践
本文将介绍 Web 前端开发中的最佳实践,包括代码组织、性能优化、响应式设计和用户体验等方面。通过遵循这些实践,开发人员可以提高开发效率,优化用户体验,并减少潜在的问题和错误。
|
3天前
|
前端开发 搜索推荐 数据安全/隐私保护
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
13 1
|
3天前
|
前端开发 JavaScript vr&ar
前端新技术探索:WebAssembly、Web Components与WebVR/AR
【4月更文挑战第12天】WebAssembly、Web Components和WebVR/AR正重塑Web应用的未来。WebAssembly允许C/C++等语言在Web上高效运行,提供接近原生的性能,如游戏引擎。Web Components通过Custom Elements和Shadow DOM实现可复用的自定义UI组件,提升模块化开发。WebVR/AR(现WebXR)则让VR/AR体验无需额外应用,直接在浏览器中实现。掌握这些技术对前端开发者至关重要。
11 3
|
5天前
|
监控 前端开发 JavaScript
如何使用浏览器调试前端代码?
【4月更文挑战第11天】前端开发中,浏览器调试是关键技能,能提升代码质量。本文介绍了如何使用浏览器的调试工具:1) 打开调试窗口(F12或右键检查);2) Elements标签页检查DOM结构和样式;3) Console调试JavaScript,查看日志和错误信息;4) Sources设置断点调试JS文件;5) 利用Network、Performance和Memory等标签页优化性能。熟悉调试工具、利用日志和错误信息能有效定位问题,提高开发效率。
16 7
|
10天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
8月前
|
Web App开发 前端开发 JavaScript
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-fiber解决了什么问题
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-fiber解决了什么问题
95 0
|
8月前
|
前端开发 定位技术
前端学习笔记202305学习笔记第二十三天-地图单线程配置
前端学习笔记202305学习笔记第二十三天-地图单线程配置
63 0
前端学习笔记202305学习笔记第二十三天-地图单线程配置
|
8月前
|
前端开发 API
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-react-redux的工作流程
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-react-redux的工作流程
55 0