我想指出这navigator.userAgent
不是很值得信赖,因为它很容易修改并且可能不代表查看页面的实际浏览器。这可能是$.browser
最初被弃用的原因之一。
但是为了这个问题,让我们假设浏览器检测是绝对需要的。
我遇到了 James Padolsey 的这个非常酷的片段,它实际上通过使用条件注释来区分 Internet Explorer。
我用上面的代码片段和一些来自yepnope.js的代码编译了一小段代码:
(function(window, doc) {
window.detector = window.detector || (function() {
var undef,
docElement = doc.documentElement,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i'),
isGecko = ( 'MozAppearance' in docElement.style ),
isGeckoLTE18 = isGecko && !! doc.createRange().compareNode,
isOpera = !! ( window.opera && toString.call( window.opera ) == '[object Opera]' ),
isWebkit = ( 'webkitAppearance' in docElement.style ),
isNewerWebkit = isWebkit && 'async' in doc.createElement('script');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]
);
return {
isGecko: isGecko,
isGeckoLTE18: isGeckoLTE18,
isGeckoGT18: isGecko && ! isGeckoLTE18,
isOpera: isOpera,
isWebkit: isWebkit,
isNewerWebkit: isWebkit && 'async' in doc.createElement('script'),
isIE: ( v > 4 ),
ieVersion: ( v > 4 ? v : undef )
};
}());
}(window, document));
这通过它们的功能来区分浏览器。
唯一的问题是,我目前无法区分 Safari 和 Chrome(都是 Webkit 浏览器),以及 Gecko、Webkit 和 Opera 浏览器本身的版本。
我知道它并不完美,但它比navigator.userAgent
.