как определить браузер opera с помощью javascript

Я хочу определить, что браузер клиентских машин в opera или не использует javascript.

6 ответов


на navigator объект содержит всю необходимую информацию. Это:

navigator.userAgent.indexOf("Opera");

теперь, когда 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 var логическое значение (true или false):

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
}

В Прототип.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]], а не только существование.

и, конечно, всегда думайте дважды, прежде чем принюхиваться к браузеру. Часто есть лучшие способы решения проблемы;)

P.S. Есть вероятность того, что будущие версии Opera изменятся [[класс]]window.opera, но это кажется маловероятным.


вышеуказанные ответы больше не работают в новой 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) 
}

новая Опера 30 версия теперь полностью использует хром, а также изменен их userAgent to OPR


вы не против использовать jQuery?

затем вы можете использовать jQuery.browser (см. documnentation)

но jQuery-ребята рекомендуют не использовать это.

мы рекомендуем не использовать это свойство, пожалуйста, попробуйте использовать функцию вместо этого обнаружение (см. С помощью jQuery.поддержка)

Edit:

для Mootools: используйте window.opera (см. документация)