Каков правильный способ обнаружения 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, вероятно, расскажет вам больше

Ответ 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.