как определить браузер opera с помощью javascript
Я хочу определить, что браузер клиентских машин в 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
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
(см. документация)