Подтвердить что ты не робот

Как определить браузер Opera с помощью JavaScript

Я хочу определить, что браузер клиентских машин в Opera или не использует JavaScript, как это сделать?

4b9b3361

Ответ 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 (см. документация)