如何使用JavaScript确定Opera浏览器

时间:2010-01-04 08:49:32

标签: javascript cross-browser opera

我想确定Opera中客户端机器的浏览器是否使用JavaScript,该怎么做?

6 个答案:

答案 0 :(得分:37)

现在Opera使用Chrome渲染引擎,已接受的解决方案不再有效。

用户代理字符串显示如下:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.132

Opera的唯一标识符是OPR部分。

以下是我使用的代码,它应与旧的Opera或新的Opera相匹配。它使Opera var成为布尔值(true或false):

var Opera = (navigator.userAgent.match(/Opera|OPR\//) ? true : false);

答案 1 :(得分:18)

if(window.opera){
    //do stuffs, for example
    alert(opera.version()); //10.10 
}

不开玩笑,Opera浏览器中有一个对象opera

您可能认为,对象opera可以覆盖,但navigator也可以覆盖。

<强>更新

要获得更准确的结果,您可以这样做

if (window.opera && opera.toString() == "[object Opera]"){
    //do stuffs, tested on opera 10.10
}

我注意到,Opera同时有addEventListener和attachEvent,所以还有另外一种方式,比如

if (window.addEventListener && window.attachEvent){
    //do stuffs, tested on opera 10.10
}

答案 2 :(得分:8)

在Prototype.js中,we use this inference

var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';

这实质上检查window.opera对象是否存在,其内部[[Class]]值是“Opera”。这是一个比仅仅检查window.opera存在更稳固的测试,因为一些不相关的全局opera变量阻碍了这种情况,并导致误报。

说到不相关的全局变量,请记住,在MSHTML DOM中,元素可以通过id / name全局解析;这意味着在标记中出现<a name="opera" href="...">foo</a>之类的内容将导致window.opera引用该锚元素。这是你的误报......

换句话说,测试[[Class]]值,而不仅仅是存在。

当然,在嗅探浏览器之前总是三思而后行。通常有更好的方法来解决问题;)

P.S。 Opera的未来版本有可能改变window.opera的[[Class]],但这似乎不太可能。

答案 3 :(得分:6)

上述答案在新的Opera 30中不再适用。因为Opera现在使用Chromium。请使用以下内容:

var isChromium = window.chrome,
    isOpera = window.navigator.userAgent.indexOf("OPR") > -1 || window.navigator.userAgent.indexOf("Opera") > -1;
if(isChromium !== null && isOpera == true) {
   // is Opera (chromium)
} else { 
   // not Opera (chromium) 
}

新的 Opera 30 版本现在完全使用 Chromium 并将userAgent更改为 OPR

答案 4 :(得分:5)

navigator对象包含您需要的所有信息。这应该做:

navigator.userAgent.indexOf("Opera");

答案 5 :(得分:0)

你介意使用jQuery吗?

然后您可以使用jQuery.browsersee documnentation

但jQuery-guys建议不要使用它。

  

我们建议不要使用它   物业,请尝试使用功能   而是检测(参见jQuery.support

修改

对于Mootools:使用window.opera(请参阅documentation