浅谈jQuery为哪般去掉了浏览器检测

所属分类: 网络编程 / JavaScript 阅读数: 1862
收藏 0 赞 0 分享

由于做HTML5相关的项目,许多前卫时髦的前端技术就需要考虑一下IE是否支持。要是在以前,可以很方便地调用jQuery的jQuery.browser来实现。

If(jQuery.browser.msie) alert(“DIE IE!”)

但这一便利在jQuery 1.9之后就不复存在了。突然觉得像失去了一个最亲密的战友,一个我一搞开发就离不开的好基友,一个我离开了就 无法写出跨浏览器的前端代码的好工具。一下子我竟不知道该如何是好。

然后每次需要考虑IE的时候,我就会去google一下,如何用1.9版本的jQuery来检测IE,但StackOverFlow上的多数回答都告诉我:jQuery1.9废掉勒jQuery.browser,建议用jQuery.support,但是没有人告诉我为什么。

也不知道那时我的是不是脑子被门夹了半天反应不过来为什么给废掉了,反正我的目的很简单,就是需要检测当前用户用的是不是IE,如果不是IE,那么我就需要弹出相关提示信息告诉用户你正在使用IE,某些功能可能不被支持云云。。。

无奈,以至于我的编码回到了那个没有jQuery的石器时代,用最原始的最plain的JavaScript代码来检测IE,而关于这样的方法,由于有无数前辈在与IE的博弈中积累了大量经验,现成的方法已经写过N多了,所以我也就随便拣一个用着。而且每次用的都还不一样,下次遇到要检测IE的时候,又去Google一把,得到另一段代码达到相同的效果。

但问题是觉得别扭,就为了检测一个IE,就需要专门为此多出一大段丑陋而跟页面功能逻辑毫不相关的代码。这感觉像是安装一个破解软件而同时被捆绑一大批广告插件一样。

伴随最近Windows8.1的发部随便关心了一下随之而来的IE11,官方居然说这货会支持WegGL技术!IE11将会支持这个微软一直唾弃的技术了。这其实还不太让人奇怪。因为IE被前端人员看成奇葩早在IE6时就开始了,这么多年过去了,开发者还不是和它共存了下来嘛。

但是IE11支持WebGL跟本文的毛线关系呢?是没多大关系,但我突然意识到之前HTML5项目中用Three.js写的东西可以在IE上运行了,至少在IE11上!所以之前关于IE的检测显得很二很不合逻辑。我天灵盖似乎一道金光冒出,走出了之前的一个误区:确实不需要检测用户使用的是不是IE浏览器。我们的目的是要让代码正常运行。如果当前浏览器支持我们代码中的特性,那么就正常运行,如果不支持,那就罢工给出提示呗。

所以我似乎理解为什么jQuery在1.9中不支持jQuery.browser了,转而给出了support这个API,而且当我再次搜索“检测IE”相关的问题时,也有声音建议用Modernizr.js(一个检测浏览器对HTML5,CSS3支持情况的JavaScript库)。

因为检测IE本身就是不科学的。尽管一些HTML5特性IE现在不支持,但它在不断的更新,所以不代表后来的版本中不支持。所以如果代码中还存在很直白的专门针对IE的代码就显得相当不科学了。一如上面提到的WegGL浏览器中3D相关的程序,可以预期,分明能够在IE11中运行,但代码如果仅仅是检测浏览器IE就罢工然后很骄傲地弹出个提示“请换用其他浏览器”,IE是不是很无辜。。。

另外还有个原因不要只是检测浏览器是不是IE,那就是各浏览器间本身就有差异,有差异是正常的,即使是除了IE外的FireFox,Chrome,Opera, Safari之类的,在各个Web标准的支持和实现上也不是完全一致。这也就是为什么一个样式在Chrome中调试正常了,到FF中显得有点别扭。如果是JavaScript代码中的差异,是否我们又该写一段检测FF的代码。或者某天发现在Opera中某个功能出来的结果有偏差,那又要写一段检测Opera的代码,显示这种思路是有问题的。

这也就是为什么Modernizr.js会有用武之地的原因。为了确保代码预期正常实现,我们需要先检测当前浏览器是否支持该功能,如果支持,okay,代码正常执行,如果不支持,则执行另一段代码。

以上这篇浅谈jQuery为哪般去掉了浏览器检测就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Angular使用Md5加密的解决方法

这篇文章主要介绍了Angular使用Md5加密的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

详解JS构造函数中this和return

本文通过实例代码给大家介绍了JS构造函数中this和return,需要的朋友参考下吧
收藏 0 赞 0 分享

ES6中Array.find()和findIndex()函数的用法详解

ES6为Array增加了find(),findIndex函数。find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined,而findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。下面通过实例详解,需要的朋友参考下吧
收藏 0 赞 0 分享

JS闭包的几种常见形式实例详解

本文通过实例代码给大家详细介绍了js闭包的几种常见形式,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下
收藏 0 赞 0 分享

ES6中Array.copyWithin()函数的用法实例详解

ES6为Array增加了copyWithin函数,用于操作当前数组自身,用来把某些个位置的元素复制并覆盖到其他位置上去。下面重点给大家介绍ES6中Array.copyWithin()函数的用法,需要的朋友参考下
收藏 0 赞 0 分享

Javascript 严格模式use strict详解

严格模式:由ECMA-262规范定义的JavaScript标准,对javascrip的限制更强。这篇文章主要介绍了Javascript 严格模式use strict详解 ,需要的朋友可以参考下
收藏 0 赞 0 分享

引入JavaScript时alert弹出框显示中文乱码问题

今天在HTML中引入JavaScript文件运行时,alert弹出的提示框中文显示为乱码,怎么解决此问题呢?下面小编给大家带来了引入JavaScript时alert弹出框显示中文乱码问题的解决方法,一起看看吧
收藏 0 赞 0 分享

AngularJs 延时器、计时器实例代码

这篇文章主要介绍了AngularJs 延时器、计时器实例代码,需要的朋友可以参考下
收藏 0 赞 0 分享

JS分页的实现(同步与异步)

这篇文章主要介绍了JS分页的实现(同步与异步),需要的朋友可以参考下
收藏 0 赞 0 分享

Angularjs自定义指令实现分页插件(DEMO)

由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能,下面小编把实例demo分享到脚本之家平台,需要的朋友参考下
收藏 0 赞 0 分享
查看更多