jQuery обнаруживает IE6, используя jQuery.support НЕ jQuery.browser - PullRequest
2 голосов
/ 19 августа 2009

Я не нашел определенного способа обнаружить IE6, используя jquery.support вместо jquery.browser, который больше не поддерживается. Также мне нужно учитывать режим Quirks, тьфу !!!

Я видел пару постов в Stack, но все они ссылаются на jquery.browser, а документация для jquery.support немного расплывчата.

Любая помощь в этом была бы велика, и спасибо заранее.

Ответы [ 6 ]

6 голосов
/ 19 августа 2009

Я думаю, что авторы jQuery simple не хотят, чтобы разработчики больше проверяли, для какого браузера запущено приложение / веб-сайт. Вместо этого они хотят, чтобы мы проверили различные функции браузера и на основании этого решили, что делать. Не имеет значения, если это IE6, IE8, Firefox или какой-то новый браузер . Как разработчик приложения вы должны знать, как поддержка браузером различных функций влияет на способность пользователя работать с вашим приложением, и вы должны действовать соответствующим образом.

$. Браузер зависит от перехвата браузера с помощью строк User Agent , что может быть ненадежно, особенно потому, что пользователям очень легко подделать User Agent в своем браузере, не то чтобы я беспокоился об этом цели макета - если они изменили свой пользовательский агент, то это их вина, что их IE6, представленный как IE7, не сможет правильно отобразить страницу. ;)

Вы можете по-прежнему использовать $ .browser, несмотря на то, что он устарел, или попытаться что-то написать самостоятельно. Может быть, для этого уже есть плагин jQuery? Я знаю, что в прошлый раз, когда мне нужно было проверить IE6, я использовал этот метод ...

4 голосов
/ 19 августа 2009

Я не нашел определенного способа обнаружить IE6 с помощью jquery.support

Нет, конечно, нет - в этом весь смысл.

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

Пока вы могли бы работать в обратном направлении от jquery.support, чтобы угадать, какой браузер работает, а затем использовать другой код, основанный на совершенно другой функции, это было бы совершенно неверно. Вы бы взяли на вооружение и без того хрупкий подход, предполагая, что браузер «X» поддерживает функцию «Y», и сделаете его еще более хрупким, добавив еще один слой несвязанных функций поиска, который может подобрать не тот браузер.

Так что догматический ответ: никогда не обнаруживать IE6 или какой-либо другой конкретный браузер. Используйте решение для поиска функций, такое как jquery.support, чтобы увидеть, какие функции вы можете использовать, но не предполагайте, что наличие или отсутствие функции 'Y' означает, что вы можете или не можете использовать другую функцию, связанную с 'Z' с тем же браузером «Х». Потому что это всегда пойдет не так, если вам нужен новый или малоизвестный браузер / версия, с которой вы раньше не встречались.

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

Неясно, находитесь ли вы в одной из этих ситуаций, поскольку в вашем вопросе нет подробностей, но когда вам действительно нужен ужасный взлом для One One Browser, примерно лучшим решением по-прежнему будут условные комментарии , добавлено в JavaScript или HTML.

3 голосов
/ 03 декабря 2010

У Брэда Келера есть идея . Используйте условные выражения IE, подобные приведенным ниже

<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> 
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en" class="no-js"><!--<![endif]-->

Затем с помощью javascript и небольшого количества jQuery вы можете сделать это ..

$(document).ready(function () { 
    if ($('html').is('.ie6')) {
       alert('You are running IE6!');
    } else if($('html').is('.ie7')) {
    alert("You are running IE7!");
    } else {
       // Browsers other than IE6 and 7.
    }
});

Редактор уничтожает мою первую часть кода, так что вот ссылка на него - http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/

2 голосов
/ 05 октября 2010

Я сделал что-то немного грязное в каком-то тестировании только сейчас, не желая использовать устаревший .browser, но не прочитав и не поняв .support.

Мне нравится больше всего, используйте условные таблицы стилей для стиля IE6. Я просто добавил к этому id = "IE6", а затем обнаружил идентификатор с помощью jQuery.

jQuery.fn.exists = function(){return jQuery(this).length>0;}
          if ($('#IE6').exists()) {
           //do something
          }

Кажется, это работает очень хорошо, я попытался запустить предупреждение и получил его только в IE6, я попытался проверить страницу, и она перешла как HTML5, я не уверен, есть ли более глубокая основная проблема с тем, что у меня есть сделано, но пока все нормально.

1 голос
/ 19 августа 2009

Вы можете сделать что-то вроде:

    var ie6to8 = jQuery.support.leadingWhitespace;
    var ie7to8 = jQuery.support.objectAll;
    if((ie6to8 && !ie7to8) || (!ie6to8 && ie7to8)) { //simulating a XOR
       // is ie6
    }

Документация говорит, что jQuery.support.leadingWhitespace является ложным в IE 6, 7 и 8. Также сказано, что objectAll ложно в IE 7 и 8. Я предположил, что это верно для других браузеров, и сделал операцию XOR на эти ценности. Таким образом, это будет верно только тогда, когда значение ведущегоWhitespace отличается от значения objectAll, что происходит только в IE6.

Вы можете увидеть больше здесь: http://docs.jquery.com/Utilities/jQuery.support

ОБНОВЛЕНИЕ: Начиная с jQuery 1.3, перехват в браузере давно не рекомендуется, но все еще можно сделать по-старому (используя $ .browser.msie и $ .browser.version). Посмотрите здесь: http://docs.jquery.com/Release:jQuery_1.3

0 голосов
/ 21 июля 2010

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

Это единственная надежная версия, которую я нашел для обнаружения IE6. Это то, что я использую в SimpleModal, и, кажется, оно хорошо работает:

var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";
...