为什么此用户代理JavaScript无法正确检测Opera?

时间:2013-11-05 13:33:33

标签: javascript html5 opera h.264

我写了一些JavaScript代码来检测Opera,因为我的网站使用了很多h.264格式的HTML5视频,Opera不支持。我想将Opera重定向到该网站的Flash版本,而不是刻苦地转录我的100多个视频。

这是我写的代码,它似乎不起作用。这是为什么?对不起,我是JavaScript的新手。

 <script type="text/javascript">
    <!--
    if ((navigator.userAgent.match(/Opera/9.80/i))) {
    location.replace("http://mysite.com/flash");
    }
    -->
    </script>

P.S。 PHP或其他服务器端语言不是一种选择。

4 个答案:

答案 0 :(得分:3)

您的正则表达式不正确。在JavaScript中,/字符用于表示正则表达式的开头和结尾,因此如果您想使用一个作为模式的一部分,则需要将其转义:

if ((navigator.userAgent.match(/Opera\/9.80/i))) {

答案 1 :(得分:3)

不是您正在寻找的答案(就如何测试用户代理而言)而是更好的解决方案(恕我直言)。

查看Modernizr并查看video(针对h264进行特定测试)。

另外,对于它的价值,有一种方法可以支持视频across devices

编辑正如@ PaulD.Waite指出的那样,您可以使用以下代码(来自DiveIntoHTML5)测试对此的支持:

function VideoAndH264IsSupported(){
  var v = document.createElement('video');
  return !!(v.canPlayType && v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, ''));
}

答案 2 :(得分:1)

您需要在正则表达式中间转义/

/Opera\/9.80/i

答案 3 :(得分:1)

较新版本的Opera在userAgent字符串中有OPR/而不是Opera/

var isOpera = ( !! navigator.userAgent.match(/(Opera|OPR)\//i));