JQuery中的浏览器特性检测
今天在公交车上,突然想到一个问题。具体是这个样子的。
JQuery从1.9版本开始废弃了一个对象$.browser
。此对象在jq1.9之前的版本中,常用于浏览器的检测,比如
$.browser.msie;
$.browser.safari;
$.browser.mozilla;
$.browser.opera;
...
可见,我们直接使用$.browser[browser-keyword]
即可方便的判断当前宿主浏览器是哪种浏览器,真是实用的特性啊。
但是如你所见,jquery从1.9版本开始竟然废弃了这个对象。我当时还真是一时想不明白,这到底是为何呢?jquery信奉的准则不是简单么,难道”write less, do more”是说着玩的?
后来仔细一想,不对啊。jquery这样的成熟项目,不可能会做一些看起来脑残的事情啊。经过一番资料查阅,我终于悟了。
JQuery从1.9开始,使用$.support
来代替$.browser
。这么说其实也不准确,应该说废弃了$.browser
,但是提供了一个新的对象,也就是$.support
。但是这个对象并不是为了判断浏览器而产生的。准确的说,它的用处是检测浏览器特性的。
也就是说,jquery不再提供赤裸裸的浏览器种类判断,而且转向提供浏览器特性的判断。另一方面,jquery的官方文档中并不建议直接使用$.support
来进行浏览器特性的判断,而是推荐采用额外的第三方库来做这个事(比如Modernizr),而这个$.support
对象,jquery更加倾向是jquery自己内部使用的。
那么,jquery为何要做这样的事情呢?
个人觉得最本质的原因是这样的,我们应该以发展的眼光去看待事物。
世界万物都是发展的,浏览器也是在不停的发展。如果我们只是将目光限定在浏览器种类的检测上,那如果早先被人诟病的浏览器经过发展,万一变成业界的事实标准,到时我们浏览器检测不是很尴尬?
另一方面,相对于浏览器种类检测,浏览器特性检测从某种程度上说更加灵活。
再者,我们需要检测浏览器的原因往往是有一些特性在不同的浏览器上可能会有不同的实现,有的浏览器支持,而有的浏览不支持。所以我们只检测相关的浏览器特性不是更加理所应当的吗?
所以,检查浏览器的种类是不科学的,也是不符合可持续发展观的。特性检查才是更加成熟的方案!