Обнаружение браузеров, которые не поддерживаются jQuery (2)

Простите меня, если есть очевидный ответ на этот вопрос, но я не смог его найти. Я рассматриваю переход на jQuery 2 и, хотя я не заинтересован в поддержке старых браузеров, я хотел бы сообщить пользователям с неподдерживаемыми браузерами, что они не могут использовать сайт.

Я вижу здесь (http://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/), что вы можете использовать условные комментарии к файлам .js ветки в разных версиях IE, но я считаю, что jQuery 2.0 снижает поддержку для ряд других браузеров тоже, а не только IE, поэтому я не думаю, что это сделало бы это в одиночку [ edit:, это неправильно, см. более крупное править ниже].

В идеальном мире я бы переключился на jQuery 2, а затем у меня появилась одна функция javascript, которая вызывается, когда jQuery сообщает мне, что она не поддерживает браузер. Есть ли простой способ сделать это, что мне не хватает?

Спасибо.

EDIT:

Я столкнулся с этим сообщением (http://bugs.jquery.com/ticket/13404), которое направило меня сюда: http://jquery.com/browser-support/. Оказывается, что с точки зрения поддержки jQuery 2 отличается только от jQuery 1.9 от браузеров IE. Соответственно, возможно, лучше задать вопрос, как определить браузеры, которые не поддерживаются jQuery (в общем, а не только версия 2). Я обновил заголовок вопроса.

EDIT2:

Поскольку обнаружение функции является наиболее рекомендуемым подходом к этой проблеме, здесь поддерживается метод поддержки jQuery (http://api.jquery.com/jQuery.support/). Тем не менее, это также кажется довольно неплохим, чтобы полагаться (поскольку это может измениться без предварительного уведомления).

Я предполагаю, что это создает ключевой вопрос. Как я должен понимать, какие функции jQuery являются или не подвержены потенциальной не-поддержке старых браузеров? Например, если кто-то приходит на сайт с 4-версией старой копии Firefox, я бы понятия не имел, какие функции мне нужно тестировать. Было бы тузом, если jQuery мог бы предложить какой-то полностью поддерживаемый тест функции, как это для HTML5: http://html5test.com/

EDIT3:

Хорошо, поэтому с условными операторами include (выделены в ответах ниже и на сайте jQuery) вы можете иметь дело со старыми версиями IE. Однако для других браузеров это немного сложно. Поскольку вы не можете полагаться на jQuery, чтобы рассказать вам что-нибудь о поддержке браузера для функций x, y или z, мой подход - просто запросить базовый javascript. Если вы хотите запросить поддержку на основе CSS, вы можете использовать modernizr. Для поддержки на основе javascript это метод, который я использую для обнаружения SUPER старых версий других браузеров:

function browser_ok() {

    if  (
            ( !Array.prototype.indexOf ) ||
            ( !Array.prototype.forEach ) ||
            ( !String.prototype.indexOf ) ||
            ( !String.prototype.trim ) ||                
            ( !Function.prototype.bind ) ||
            ( !Object.keys ) ||
            ( !Object.create ) ||
            ( !JSON ) ||
            ( !JSON.stringify ) ||
            ( !JSON.stringify.length ) ||
            ( JSON.stringify.length < 3 )
        )
    {
        return false;
    }

    // # local storage support
    // source: http://diveintohtml5.info/storage.html

    try {
        var local_storage_support = ( 'localStorage' in window && window['localStorage'] !== null );
        if ( !local_storage_support ) {
            throw new Error("local_storage_support: failed");
        }
    }
    catch ( e ) {
        return false;
    }

    // # AJAX uploads

    if ( !window.FormData || !window.FileReader ) {
        return false;
    }

    // # HTML data elements

    var body = $("body");
    body.data("browser_support_test",42);
    if ( body.data("browser_support_test") !== 42 ) {
        return false;
    }
    else {
        body.removeData("browser_support_test");
    }

    return true;
}

AFAICT, эта функция должна исключать все браузеры, которые могут вызвать проблемы jQuery для ее основных функций. Если вы хотите сделать что-то фантастическое, то, вероятно, определенная функциональность, которую вы знаете, вам нужно, чтобы вы могли ее проверить.

Ответы

Ответ 1

Похоже, что он просто снижает поддержку IE 6, 7 и 8 - вы должны иметь возможность использовать:

HTML:

<!--[if lt IE 9]> <html data-browser="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->

JS:

if( document.documentElement.getAttribute('data-browser') !== null ){
    // not supported by jQuery 2.x
}

Если вы решите поддерживать старые браузеры, но все же хотите, чтобы улучшения команды jQuery были включены в 2.x, вы можете использовать версию 1.x: http://jquery.com/download/

Update:

Трудно/нецелесообразно обнаруживать каждый браузер, который не поддерживает jQuery, причина в том, что jQuery - это просто библиотека javascript.

Различные браузеры и версии, используемые для использования разных методов в некоторых JavaScript-функциях (например, ajax), означают, что некоторые старые браузеры будут поддерживать некоторые функции и не будут поддерживать других. Существует не прямой этот браузер поддерживает все функции или , этот браузер не поддерживает никаких функций.

Предложение Rob W действительно хорошее, обслуживать новую версию (2.x) для современных браузеров и версию 1.x(с прежней поддержкой) старым браузерам.

Посмотрите на эту статью: Изящная деградация против прогрессивного улучшения и рассмотрим возможность использования Modernizr. Это позволяет вам проверить, какие функции поддерживает пользовательский браузер, и позволяет писать приложения, чтобы в полной мере использовать последние достижения, при этом обеспечивая хороший опыт для пользователей старых браузеров.

Ответ 2

Способ получения преимуществ jQuery 2.0 при поддержке IE 6, 7 и 8 заключается в использовании условных комментариев:

<!--[if lt IE 9]><script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script><![endif]-->
<!--[if IE 9]><!--><script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script><!--<![endif]-->
<script>window.jQuery||document.write('<script src="jquery.js"><\/script>');</script>
  • Первый условный комментарий гарантирует, что jQuery 1.x загружен для IE < 9.
  • Последняя версия jQuery (2.0.3) используется в IE 9 и браузерах, где условные комментарии не распознаются (IE 10 отказался от поддержки условных комментариев).
  • Когда jQuery не загружается с CDN, загружается резервная копия (jquery.js, размещенная на вашем сервере).