Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript确定Opera浏览器_Javascript_Cross Browser_Opera - Fatal编程技术网

如何使用JavaScript确定Opera浏览器

如何使用JavaScript确定Opera浏览器,javascript,cross-browser,opera,Javascript,Cross Browser,Opera,我想确定客户端机器的浏览器是否在Opera中使用JavaScript,如何做到这一点?导航器对象包含您需要的所有信息。这应该做到: navigator.userAgent.indexOf("Opera"); 您介意使用jQuery吗 然后可以使用jQuery.browser() 但是jQuery的人建议不要使用这个 我们建议不要使用此选项 属性,请尝试使用该功能 改为检测(请参阅) 编辑: 对于Mootools:使用window.opera(请参阅) 别开玩笑了,opera浏览器中有一个对象o

我想确定客户端机器的浏览器是否在Opera中使用JavaScript,如何做到这一点?

导航器对象包含您需要的所有信息。这应该做到:

navigator.userAgent.indexOf("Opera");

您介意使用jQuery吗

然后可以使用
jQuery.browser
()

但是jQuery的人建议不要使用这个

我们建议不要使用此选项 属性,请尝试使用该功能 改为检测(请参阅)

编辑:

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

别开玩笑了,opera浏览器中有一个对象
opera

您可能认为,object
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
}
在Prototype.js中:

这主要检查
window.opera
对象是否存在,其内部[[Class]]值是否为“opera”。这是一个比仅仅检查
window.opera
是否存在更可靠的测试,因为某些不相关的全局
opera
变量妨碍并导致误报的可能性要小得多

说到不相关的全局变量,请记住,例如,在MSHTMLDOM中,元素可以通过id/name全局解析;这意味着标记中出现类似
的内容将导致
window.opera
引用该锚元素。这是你的假阳性

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

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


另外,Opera的未来版本可能会改变[code>window.Opera的[[Class]],但这似乎不太可能。

既然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 Mozilla/5.0(Macintosh;英特尔Mac OS X 10_8_4)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.132 Opera的唯一标识符是
OPR
部分

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


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

上述答案在新的Opera 30中不再适用。因为Opera现在使用铬。请使用以下表格:

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

我正在使用mootools 1.2,那么在mootools 1.2中如何做到这一点呢?我编辑了我的帖子,但我知道这在谷歌上很容易找到(就像我做的那样)-1为什么建议一些连制造商都反对的东西?因为这是Avinash要求的,如何检测用户是否在使用opera。@贾斯汀:制造商不建议使用
jQuery.browser
来找出客户端正在运行的浏览器,他们建议不要使用
jQuery.browser
来检查特定的功能支持。该方法完全符合OP的要求;Natrium提供了一个回答,提供了要求的内容,同时指出,有时不希望做要求做的事情(我们没有足够的信息来了解Avinash正在做什么,以了解在这种情况下是否可以进行明确的浏览器检查)。如果我是你,我会取消否决票,这是非常有效的。你应该尽可能使用特征检测。请看@S.Mark的回答。我同意您应该尽可能使用功能检测,但这仍然是对如何确定客户端是否正在运行opera这一明确问题的正确回答。如果问题是如何确定此opera特定函数是否存在,则最好检查该函数。马克的建议虽然很方便(我也投了赞成票),但根本不是特征检测。它依赖于一个只存在于opera中的对象,并检查它,是的,但它不检查opera检查要求背后的特定功能(我们不知道)。。。导航器字符串用于浏览器检测。使用特征检测来检测浏览器甚至比使用普通浏览器检测更糟糕。这种方法不再有效,因为Opera切换到了Chrome的渲染引擎。这意味着navigator.userAgent提供了如下内容:“Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,像Gecko)Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153”注意,没有“Opera”,因此结果总是-1。通过特征检测识别Opera或使用下面的@Zack Katz方法。不再有用了。用法:isOpera(){return(navigator.userAgent.indexOf(“OPR”)!=-1}@贾斯汀,这不是特征检测。如果说有什么区别的话,那就是基于特征的浏览器检测。看见另外
window.opera&&Object.toString.call(window.opera)=“[Object opera]”
将是一个更可靠的检查。对不起@S.Mark,我应该写
Object.prototype.toString.call(window.opera)
@J-P:在什么情况下,最好使用
Object.prototype.toString.call
而不是在对象上调用
toString
?(考虑到之前我们已经检查过null)是否在case
window中。opera
应该实现自己的
toString
函数吗?@David,是的,正是这样。其实没有必要——只是让检查更可靠一点。Opera 16没有
窗口。Opera
为什么还要检测Opera?而且,从你的问题来看,似乎你想检测没有JS的用户。。。使用JS是不可能的。我需要 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
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) 
}