我使用以下代码来发现用户浏览器:
navigator.appName == "Microsoft Internet Explorer"
它总是有效,但IE11正在返回Netscape
我读过浏览器检测是一种不好的做法。 (Why does JavaScript navigator.appName return Netscape for Safari, Firefox and Chrome?),我们应该检测功能。但MS的site教我如何检测IE浏览器。
在IE11中,即使是userAgent也会提到IE:
Mozilla / 5.0(Windows NT 6.3; WOW64; Trident / 7.0; .NET4.0E; .NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0)像Gecko
这就是说:
了解我必须使用的内容的正确方法是什么?
例如,如果我使用IE,则命令为:
window.document.execCommand('Stop');
否则,命令是
window.stop()
搭便车,了解浏览器是否支持HTML5的正确方法是什么?
答案 0 :(得分:5)
正如您所提到的,正确的方法是检查功能,并且根本不会进行浏览器嗅探。
function stop() {
if ('execCommand' in document) {
document.execCommand('Stop');
}else{
window.stop()
}
}
反过来说,你可以用execCommand将window.stop填充,就像这样
if (! ( typeof window.stop == 'function' &&
window.stop.toString().indexOf('native code') != -1
)
) {
window.stop = function () {
document.execCommand('Stop');
}
}
这也可以确保它是原生方法,并在Chrome,Firefox和Opera中进行测试
答案 1 :(得分:0)
如果有一个 JavaScript库在用户的浏览器中检测HTML5和CSS3功能那么这不是很酷,这样你就可以知道是否支持某个功能而不是依赖于浏览器检测(版本噩梦)......
有...... modernizr
来自Docs :
为什么要使用Modernizr? 利用酷炫的新网络技术非常有趣,直到您必须支持落后的浏览器。无论浏览器是否支持某项功能,Modernizr都可以让您轻松编写条件JavaScript和CSS来处理每种情况。它非常适合轻松进行渐进式增强。
工作原理 Modernizr在页面加载时快速运行以检测功能;然后,它会创建一个包含结果的JavaScript对象,并将类添加到html元素,以便您键入CSS。 Modernizr支持许多测试,并且可选地包括YepNope.js,用于条件加载外部.js和.css资源。
示例(也来自文档)
Modernizr.load({
test: Modernizr.geolocation,
yep : 'geo.js',
nope: 'geo-polyfill.js'
});
在此示例中,我们决定应根据主机浏览器是否支持地理位置来加载不同的脚本。通过这样做,您可以避免用户下载浏览器不需要的代码。这样可以提高页面性能,并提供一个明确的位置来为您的polyfill构建一个健康的抽象量('geo.js'和'geo-polyfill.js'看起来与应用程序的其余部分相同,即使它们'重新实施不同)。
IMO modernizr
是事实上的功能检测JavaScript库,我在所有项目中使用它。它确实有一个轻微的学习曲线,但文档非常好,几乎涵盖了每个功能,并且仅在上述示例中为您提供的灵活性就足以成为使用它的理由。