Каков правильный способ обнаружения Opera с помощью jQuery?
Недавно Amazon.com обновил свой javascript и вызвал проблемы с некоторыми браузерами Opera.
Их код обнаружения браузера выглядит так, но он неисправен:
function sitbReaderIsCompatibleBrowser() {
if (typeof(jQuery) == 'undefined') {
return false;
} else {
var version = jQuery.browser.version || "0";
var splitVersion = version.split('.');
return (
(jQuery.browser.msie && splitVersion[0] >= 6) // IE 6 and higher
|| (jQuery.browser.mozilla && (
(splitVersion[0] == 1 && splitVersion[1] >= 8) // Firefox 2 and higher
|| (splitVersion[0] >= 2)
))
|| (jQuery.browser.safari && splitVersion[0] >= 500) // Safari 5 and higher
|| (jQuery.browser.opera && splitVersion[0] >= 9) // Opera 5 and higher
);
}
}
Ничего явно неправильно выпрыгивает на меня с помощью этого кода, но я никогда не использовал jQuery, прежде чем я не знаю.
Несмотря на то, что этот код похож на попытку позволить пользователям Opera, когда я посещаю страницу с помощью Opera 9.64, я получаю сообщение "неподдерживаемый браузер". Если я изменил настройки Opera, чтобы сообщить себя как Firefox, страница работает отлично! Имея это в виду, я уверен, что это проблема с script, а не с браузером.
У любого эксперта jQuery есть предложение?
Вы можете воспроизвести поведение, посетив любую книгу на Amazon и нажав ссылку "загляните внутрь этой книги".
Ответы
Ответ 1
До jQuery 1.3 вы можете использовать jQuery.browser:
if( $.browser.opera ){
alert( "You're using Opera version "+$.browser.version+"!" );
}
Из версии 1.3 вы должны использовать jQuery.support.
Основная причина этого заключается в том, что следует избегать проверки браузеров, поскольку функции могут меняться от версии к версии, что делает ваш код устаревшим в кратчайшие сроки.
Вы всегда должны использовать функцию обнаружения. Это позволит вам увидеть, поддерживает ли текущий браузер ту функцию, которую вы пытаетесь использовать, независимо от бренда браузера, версии и т.д.
Ответ 2
Существует специальный объект window.opera, который присутствует во всех браузерах Opera 5+. Так что просто:
if (window.opera && window.opera.buildNumber) {
// we are in Opera
}
будет достаточно.
Ответ 3
Я проверяю Opera следующим образом:
if (/Opera/.test (navigator.userAgent)) // do something
Зачем вам нужен jQuery?
Ответ 4
Гораздо лучше обнаружить возможности javascript, а не браузер userAgent.
т.е. DOM, XmlHttpRequest, eventing model (event.target vs event.srcElement), ActiveX, Java и т.д.
Сосредоточив внимание на функциях API, которые вам потребуются, а не на целевом браузере, вы создадите более надежный набор сценариев и неизбежно менее специальный корпус.
Эта ссылка здесь, на opera, вероятно, расскажет вам больше
Ответ 5
Очень простой способ из самих Opera:
if (window.opera) {
//this browser is Opera
}
Источник: http://my.opera.com/community/openweb/idopera/
Ответ 6
Основная причина, по которой Amazon терпит неудачу в Opera, - это то, что вы отправляете другой код с серверной части... Если вы заходите на ту же страницу с Firefox, а затем сохраняете эту страницу и открываете ее в Opera, она отлично работает...
Но они обещали исправить это в январе...
Ответ 7
Я не знаю точно (я вообще никогда не проверяю оперу), но если встроенная функция jQuery не определяет опера, может быть ошибка с jQuery, которая должна быть исправлена. Я подозреваю, что если дело, то оно должно быть разрешено довольно быстро.
Ответ 8
В текущем HTML5 раз, вы также можете часто проверять функции браузера.
if (!window.FormData) { alert("xmlhttprequest L2 FormData interface not available"); }
Ответ 9
Я думаю, что этот путь - лучший
if (window.opera.version() == 12) { }
В этом примере проверьте, есть ли операционная версия 12. Очень полезно, когда у меня возникают проблемы с шрифтом в Opera.