Как правильно определить Opera, используя jQuery? - PullRequest
15 голосов
/ 14 марта 2009

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, страница работает отлично! Имея это в виду, я уверен, что это проблема скрипта, а не браузера.

Есть ли у экспертов jQuery предложения?

Вы можете повторить поведение, посетив любую книгу на Amazon и нажав на ссылку "посмотреть в этой книге".

Ответы [ 9 ]

20 голосов
/ 14 марта 2009

До версии jQuery 1.3 вы могли использовать jQuery.browser :

if( $.browser.opera ){
  alert( "You're using Opera version "+$.browser.version+"!" );
}

Начиная с версии 1.3, вы должны использовать jQuery.support .

Основная причина этого заключается в том, что следует избегать проверки браузеров, поскольку функции могут изменяться от версии к версии, что делает ваш код устаревшим в кратчайшие сроки.

Вы должны всегда пытаться использовать функцию обнаружения вместо этого. Это позволит вам увидеть, поддерживает ли текущий браузер функцию, которую вы пытаетесь использовать, независимо от бренда, версии и т. Д.

10 голосов
/ 28 сентября 2010

Существует специальный window.opera объект, который присутствует во всех браузерах Opera 5+. Так что так просто, как:

if (window.opera && window.opera.buildNumber) { 
    // we are in Opera 
}

будет достаточно.

5 голосов
/ 14 марта 2009

Гораздо лучше определять возможности javascript, чем агента пользователя браузера.

т.е. DOM, XmlHttpRequest, модель событий (event.target vs event.srcElement), ActiveX, Java и т. Д.

Сосредоточив внимание на функциях API, которые вам потребуются, а не на целевом браузере, вы создадите более надежный набор сценариев и неизбежно менее специальный корпус.

Эта ссылка здесь опера , вероятно, расскажет вам больше

5 голосов
/ 14 марта 2009

Я проверяю оперу так:

if (/Opera/.test (navigator.userAgent)) // do something

Зачем вам нужен jQuery?

2 голосов
/ 23 сентября 2012

Очень простой способ из самой Opera:

if (window.opera) {
    //this browser is Opera
}

Источник: http://my.opera.com/community/openweb/idopera/

1 голос
/ 20 декабря 2010

Основная причина, по которой Amazon не работает в Opera, заключается в том, что отправка уже другого кода со стороны сервера ... Если вы заходите на ту же страницу с Firefox, а затем сохраняете эту страницу и снова открываете ее в Opera, она работает нормально ...

Но они обещали исправить это когда-нибудь в январе ...

0 голосов
/ 30 ноября 2015

Я думаю, что этот путь лучший
if (window.opera.version () == 12) { }
В этом примере проверяется, установлена ​​ли версия Opera 12. Очень полезно, когда у меня возникают проблемы со шрифтом в Opera.

0 голосов
/ 28 сентября 2010

В настоящее время HTML5 вы также можете часто проверять функции браузера.

if (!window.FormData) { alert("xmlhttprequest L2 FormData interface not available"); }
0 голосов
/ 14 марта 2009

Я точно не знаю (в любом случае, я никогда не проверяю оперу), но если встроенная функциональность jQuery не обнаруживает оперу, может быть ошибка в jQuery, которую нужно исправить. Я подозреваю, что если это так, то это должно быть решено довольно быстро.

...