很久没更新一些实际的东西,最近也是浑浑噩噩,懒得网博客里写东西,但也酝酿改变一下博客的现状。
中午起来就发现邮箱通知我博文有被Track,真是激动,原来是关于浏览器版本判断的内容,立刻查看了一下。
这篇文章的原地址:http://www.quchao.com/entry/detect-browser-by-features/
文章主要是对Firefox 3.6的改进进而改变了原有的特征判断而总结的现有技巧
而我的这篇文章 Javascript浏览器判断终极技巧已经落后于现在的浏览器发展,非常惭愧的是当时写上了终极技巧这四个字
Firefox 3.6现在仍处于Beta阶段(Beta 5),我还没有尝试过(扩展版本兼容的疑虑 – -)
荒废了这么久的JS和前端知识,再看看Firefox 3.6确实如原作者所说是一次飞跃(3.7我想也是?)
浏览器分支实在让人头疼,特征判断永远不是从一而终的,现代浏览器每时每刻都在改进以适合现在的“云网络”(一直认为这种概念纯粹玩文字…… - -)
纯粹的功能特征判断是无法达到精确的,一定要配合UA,虽然我不认识Nicholas C. Zakas大师,但我还是非常赞同大师的观点。
以上是自我总结,再是引用一下原文的关键内容
由于 Firefox 3.6 产生了巨大的变化,
(当然不仅是 Javascript 这个层面,
也比如旧的 chrome 注册文件 contents.rdf 也被废止等等)
我们理应将 3.6 版本作为 Firefox 的一个里程碑版本来对待。
对于本文而言,
也就是传说中用来区别 Firefox 的诸多特征已经消失:
比如最令人熟知的 window.getBoxObjectFor() ,
再比如 /a/[-1] == ‘a’ 这个 trick 。
因此我们必须找一个新的特征来填上这个漏洞,
(想从 Firefox 1.0 找一个延续至今的特征极为困难)
查阅文档后你刚好可以找到一个从 3.6 开始
被 Firefox 用来保存拖拽时数据的方法 window.DataTransfer() ,
而且经测试在最新的 Firefox 3.7a1pre nightly 也得到支持。
1 2 3 4 5 6 7 8 9 10 11 | (function (win, doc) { var isIE = '\v' === 'v', isIE6 = isIE && !win.XMLHttpRequest, isIE8 = !!win.XDomainRequest, isIE7 = isIE && !!win.XMLHttpRequest && !isIE8, isFF = !!doc.getBoxObjectFor || !!win.DataTransfer, // gecko isOP = !!win.opera, isWK = !!win.devicePixelRatio, // web-kit isSF = /a/.__proto__ == '//', // safari isCR = !isFF && !!win.MessageEvent; // chrome })(window, document); |
1 2 3 4 5 6 7 | (function (win) { var upperFF36 = !!win.DataTransfer, // 3.6 以上,下同 upperFF35 = !!Object.getPrototypeOf, upperFF2 = !!win.globalStorage; upperFF3 = upperFF2 && !!win.MessageEvent, upperFF15 = !!Array.some; })(window); |
Responses to “Javascript浏览器判断技巧补充”
发表回复