3

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

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

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

PS PHP 或其他服务器端语言不是一个选项。

4

4 回答 4

3

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

查看Modernizr并检查video(针对 的特定测试h264)。

此外,值得一提的是,有一种方法可以支持跨设备的视频。

编辑正如@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/, ''));
}
于 2013-11-05T13:39:24.483 回答
3

您的正则表达式不正确。在 JavaScript 中,该/字符用于指示正​​则表达式的开始和结束,因此如果您想将其用作模式的一部分,则需要对其进行转义:

if ((navigator.userAgent.match(/Opera\/9.80/i))) {
于 2013-11-05T13:35:11.680 回答
1

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

var isOpera = ( !! navigator.userAgent.match(/(Opera|OPR)\//i));
于 2014-10-07T00:15:04.747 回答
1

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

/Opera\/9.80/i
于 2013-11-05T13:35:01.937 回答