使用javascript检测用户浏览器

时间:2014-08-19 03:35:43

标签: javascript html5 cross-browser

我使用以下代码来发现用户浏览器:

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的正确方法是什么?

2 个答案:

答案 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库,我在所有项目中使用它。它确实有一个轻微的学习曲线,但文档非常好,几乎涵盖了每个功能,并且仅在上述示例中为您提供的灵活性就足以成为使用它的理由。