24

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

4

6 回答 6

40

现在 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 匹配。它使Operavar 成为布尔值(真或假):

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

于 2013-07-02T21:32:42.837 回答
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
}
于 2010-01-04T08:57:35.060 回答
8

以上答案在新的 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并且也将其更改userAgentOPR

于 2015-07-24T11:23:21.703 回答
7

在 Prototype.js 中,我们使用这个推断

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]] 的值,而不仅仅是存在。

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

PS 未来版本的 Opera 可能会更改 [[Class]] 的window.opera,但这似乎不太可能。

于 2010-01-04T14:38:10.813 回答
4

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

navigator.userAgent.indexOf("Opera");
于 2010-01-04T08:52:55.040 回答
-1

你介意使用 jQuery 吗?

那么你可以使用jQuery.browser见文档

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

我们建议不要使用此属性,请尝试使用特征检测代替(请参阅jQuery.support

编辑:

对于 Mootools:使用window.opera(参见文档

于 2010-01-04T08:55:38.840 回答