一月 9th, 2010

Javascript浏览器判断技巧补充

228 views, Javascript, 前端设计, by hitigon.

很久没更新一些实际的东西,最近也是浑浑噩噩,懒得网博客里写东西,但也酝酿改变一下博客的现状。

中午起来就发现邮箱通知我博文有被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);

Back Top

Responses to “Javascript浏览器判断技巧补充”

  1. 没有任何评论。
  1. 没有任何引用。

发表回复

Back Top