我想确定 Opera 中客户端机器的浏览器是否使用 JavaScript,怎么做?
6 回答
现在 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 成为布尔值(真或假):
var Opera = (navigator.userAgent.match(/Opera|OPR\//) ? true : false);
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
}
以上答案在新的 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
在 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
,但这似乎不太可能。
该navigator
对象包含您需要的所有信息。这应该这样做:
navigator.userAgent.indexOf("Opera");
你介意使用 jQuery 吗?
那么你可以使用jQuery.browser
(见文档)
但是 jQuery-guys 建议不要使用它。
我们建议不要使用此属性,请尝试使用特征检测代替(请参阅jQuery.support)
编辑:
对于 Mootools:使用window.opera
(参见文档)