我大致翻译了部分文章,可能有理解错误的地方,敬请指正。值得一提的是,评论部分的争论亦值得一看。
特性检测 起初前端工程师们就极力反对浏览器检测,他们认为类似user-agent嗅探的方法是很不好的,理由是它并不是一种面向未来的代码,无法适应新版的浏览器。更好的做法是使用特性检测,就像这样:
复制代码 代码如下:
if (navigator.userAgent.indexOf("MSIE 7") > -1){
//do something
}
而更好的做法是这样:
复制代码 代码如下:
if(document.all){
//do something
}
这两种方式并不相同。前者是检测浏览器的特殊名称和版本;后者却是检测浏览器的特性。UA嗅探能够精确得到浏览器的类型和版本(至少能得知浏览器类型),而特性检测却是去确定浏览器是否拥有某个对象或者支持某个方法。注意这两者是完全不同的。
因为特性检测依赖于哪些浏览器支持,当出现新版本浏览器的时候需要繁琐的确认工作。例如DOM标准刚出现的时候,并不是所有浏览器都支持getElementById()方法,所以一开始代码可能是这样:
复制代码 代码如下:
if(document.getElementById){ //DOM
element = document.getElementById(id);
} else if (document.all) { //IE
element = document.all[id];
} else if (document.layers){ //Netscape < 6
element = document.layers[id];
}
这是特性检测很好的一个例子,亮点在于当其它浏览器开始支持getElementById()方法时不必修改代码。
混合方式
后来前端工程师们考虑改进的写法,代码变化成这样:
复制代码 代码如下:
//AVOID!!!
if (document.all) { //IE
id = document.uniqueID;
} else {
id = Math.random();
}
这个代码的问题是通过检测document.all属性来确定是否是IE。当确定是IE后,假定使用私有的document.uniqueID属性也是安全的。然而,目前所作的只是确定是否支持document.all,并非是去辨识浏览器是否为IE。仅仅支持document.all的话也不意味着document.uniqueID是可用的。
后来人们开始这样写,用下面那行代替上面的:
var isIE = navigator.userAgent.indexOf("MSIE") > -1;
//下面这行代替上面那行
var isIE = !!document.all;这些变化说明大家对“不要使用UA嗅探”存在误解——不再对浏览器的详细信息进行检测,取而代之的是通过特性的支持来推断。这种基于浏览器特性检测的方式非常不好。
后来前端们发现document.all并不可靠,更好的检测IE变为:
var isIE = !!document.all && document.uniqueID;这种实现方式陷入歧途。不仅需要费时费事地去识别浏览器所增加的特性支持,另外也不能确定其它浏览器开始支持相同的特性。
如果你认为这样的代码并未被广泛使用,那么看看来自于老版本的Mootools代码片段吧:
复制代码 代码如下:
//from MooTools 1.1.2
if (window.ActiveXObject) window.ie = window[window.XMLHttpRequest ? 'ie7' : 'ie6'] = true;
else if (document.childNodes && !document.all && !navigator.taintEnabled) window.webkit = window[window.xpath ? 'webkit420' : 'webkit419'] = true;
else if (document.getBoxObjectFor != null || window.mozInnerScreenX != null) window.gecko = true;
注意它是如何使用特性检测的。我可以指出它一系列的问题,比如通过检测window.ie会将ie8误认为ie7。
余波
随着浏览器的快速发展,使用特性检测变得越来越困难和不可靠。但是Mootools 1.2.4仍然使用这一方法,例如:getBoxObjectFor()。
复制代码 代码如下:
//from MooTools 1.2.4
var Browser = $merge({
Engine: {name: 'unknown', version: 0},
Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},
Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},
Plugins: {},
Engines: {
presto: function(){
return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
},
trident: function(){
return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4);
},
webkit: function(){
return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
},
gecko: function(){
return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18);
}
}
}, Browser || {});
应该怎么做?
特性检测是个应该避免的方法,尽管直接进行特性检测是个很好的方法,并且大部分情况下能满足需求。一般只要在检测前知道这个特性是否被实现即可,而不会去考虑它们之间的关系。
我并非是说永远不使用浏览器特性检测而是基于UA嗅探,因为我相信它还是有很多用途的,然而我不相信它有很多合理的用途。如果你考虑UA嗅探的话,请先贯彻这一思想:唯一安全的方式是针对特定浏览器的特定版本,超出范围之外都是不可靠的——例如新出的浏览器版本。其实这样做也是个明智的办法,因为相较于向前兼容不确定的新版本而言,向后兼容老版本是最简单的做法。
相关推荐:
软件AI:颠覆未来的智能革命
GPT优化:让你的工作与生活更高效、更智能,Ai__79
什么是seo方法,何为seo ,ai写作神器源码是什么
SEO目标:让您的网站轻松登顶搜索引擎,优化购物网站的搜索
为什么选择B站VIP?让你畅享更丰富的视听体验,小门类网站seo
“赞片CMS”-让你的*站点管理更高效、便捷,日照seo平台
seo项目是什么,seo是啥 ,ai ued
创作新时代:自动生成文章AI的魅力与未来
OpenPose大白话解释:让你轻松理解姿态识别的神奇技术,ai天天晴
SEO观察:2025年搜索引擎优化的新趋势与机遇,seo2是什么状态
ChatGPT宕机恢复时间如何解决用户焦虑与技术背后的故事,ai人工智能写作火山
AI生成网页模板,轻松打造专业网站,ai网格画法
什么是seo艺术,什么是seo seo有何价值 ,ai写作生成器 推荐
智能AI写文章:高效创作新风尚
《命运交错的轨迹:小说背后的无尽魅力》,seo优化huifachina
seo网站编辑是做什么,seo网站编辑可在家兼职 ,ai慢直播
AI文章精简-高效提炼与优化你的内容创作,ai quid
用AI写一篇文章,如何提升你的写作效率与创意
ChatGPT40不收费版本:科技革新,智能助手助力生活与工作,ai医疗武器有哪些
ChatGPT页面空白无法登录?如何解决这一困扰?,温州ai字幕生成
AI工具汇总网站,让科技为您的工作加速
ChatGPT内部HTTP接口文档-为开发者提供高效便捷的AI服务接入方式,安屿ai
SEO化学物质:如何在化工行业提升搜索引擎排名和品牌曝光,rack ai
SEO新闻:2025年最新趋势与最佳实践,你不可错过的SEO战略,郑州网络营销推广的优势
用AI修改文章,提升写作效率与质量的新时代
SEO攻略:搜索引擎优化,快速提升网站排名,网站推广网站优化费用
AI免费生成文字,打造创作新时代
SEO外包:提升网站排名与品牌曝光的最佳选择,大创建设网站
SEO量:提升网站流量和排名的关键法则,德兴seo
ChatGPT显示无法加载网站是怎么回事?解决方法!,glow将军ai
什么是SEO优化方案,seo的优化方案 ,ai emorobot
seo自己做什么,自己做seo需要花钱吗 ,ai850775
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
专业关键词助力SEO优化,让你的内容脱颖而出,东营响应式网站优化
SEO每日:提高网站流量的秘密武器,助你脱颖而出,seo优化和排名技巧
SEO要素:优化网站排名的关键因素全解析,棒球大联盟营销推广文案
SEO优化如何为网站做好关键词研究和优化,ai直通
seo经验是什么,seo进阶 ,ai矿机
SEO快速提升SEO排名的有效策略:让你的网页飞跃搜索引擎,ai调色食物
优化公司:助力企业腾飞的秘密武器,微信营销推广价格多少
SEO小白必看!从零起步SEO的秘诀,轻松提升网站排名,南京网站运营优化平台
好用的AI写作软件,让创作更高效
ChatGPT-01:开创人工智能新纪元,AI如何画模糊的云层
ChatGPT页面不自动显示最新消息:如何解决这一困扰,提升使用体验?,斑马ai幼儿百度云网盘
seo读什么书,seo是哪个专业的 ,亚洲9ai吧
线上AI写作免费一键生成,轻松提升写作效率,解放创作思维
ChatGPT登录界面都不显示了?可能是这些原因导致的!,上海小学ai智能课
为什么seo吸引人,为什么seo吸引人呢 ,ai路径查找器绘制树
SEO表格:优化网站排名的秘密武器,大数据推广营销费用多少
为什么要seo 运营,为什么需要seo ,ai人物头盔