Я хочу определить, что браузер клиентских машин в Opera или не использует JavaScript, как это сделать?
Как определить браузер Opera с помощью JavaScript
Ответ 1
Объект navigator
содержит всю необходимую информацию. Это должно сделать:
navigator.userAgent.indexOf("Opera");
Ответ 2
Теперь, когда Opera использует механизм рендеринга Chrome, принятое решение больше не работает.
Строка User Agent отображается следующим образом:
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 логическим значением (true или false):
var Opera = (navigator.userAgent.match(/Opera|OPR\//) ? true : false);
Ответ 3
if(window.opera){
//do stuffs, for example
alert(opera.version()); //10.10
}
Не шутите, в операционном браузере есть объект opera
.
Вы можете думать, что объект opera
является переопределяемым, но navigator
также может быть переопределяемым.
UPDATE
Чтобы получить более точный результат, вы можете сделать
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
}
Ответ 4
В 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
ссылается на этот элемент привязки. Там ваш ложный позитив...
Другими словами, значение test [[Class]], а не только существование.
И, конечно, всегда думайте дважды, прежде чем обнюхивать браузер. Зачастую есть лучшие способы решения проблемы;)
P.S. Там шанс будущих версий Opera изменить [[Класс]] window.opera
, но это кажется маловероятным.
Ответ 5
Вышеупомянутые ответы больше не работают в новой 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
Ответ 6
Вы не можете использовать jQuery?
то вы можете использовать jQuery.browser
(см. documnentation)
Но jQuery-ребята рекомендуют не использовать это.
Мы рекомендуем не использовать этот собственности, попробуйте использовать функцию (см. jQuery.support)
Edit:
Для Mootools: используйте window.opera
(см. документация)