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