Я хочу решить, что браузер клиентских машин в Opera или не использовании JavaScript, как сделать это?
Объект навигатор
содержит всю необходимую информацию. Это должно сделать:
navigator.userAgent.indexOf("Opera");
В Prototype.js, мы используем этот вывод:
var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
Это, по сути, проверяет, что объект window.opera
существует и его внутренним значением [[Class]] является "Opera". Это более надёжная проверка, чем просто проверка существования window.opera
, так как вероятность того, что какая-то несвязанная глобальная переменная opera
окажется на пути и приведёт к ложным срабатываниям, гораздо меньше.
Говоря о несвязанной глобальной переменной, помните, что в MSHTML DOM, например, элементы могут разрешаться по id/name глобально; это означает, что наличие чего-то вроде foo
] в разметке приведет к тому, что window.opera
будет ссылаться на этот якорный элемент. Там есть ваше ложное срабатывание...
Другими словами, проверим значение [[Класс]], а не просто существование.
И конечно, всегда дважды подумайте, прежде чем вынюхивать для браузера. Часто есть лучшие способы решения проблемы ;)
P.S. Есть вероятность, что в будущих версиях Opera изменится [[Class]] из window.opera
, но это кажется маловероятным.
не возражаете против использования jQuery?
тогда вы можете использовать jQuery.browser
( см. колонку )
Но ребята из jQuer рекомендуют не использовать это.
Мы не рекомендуем использовать это свойство, пожалуйста, попробуйте использовать функцию вместо обнаружения (см. jQuery.support)
Edit:
For Mootools: use window.opera
(см. documentation)
if(window.opera){
//do stuffs, for example
alert(opera.version()); //10.10
}
Не шучу, есть объект Opera
в Opera Browser.
Вы можете подумать, объект Opera
переопределен, но Navigator
тоже переопределен.
Обновление :
Чтобы получить более точный результат, вы можете сделать понравиться
if (window.opera && opera.toString() == "[object Opera]"){
//do stuffs, tested on opera 10.10
}
, и я заметил, что Opera есть как addEventListener, так и Batchevent, так что есть и другой способ
if (window.addEventListener && window.attachEvent){
//do stuffs, tested on opera 10.10
}