Как сделать определение браузера с помощью jQuery 1.3 долларов.браузер.МСИ осуждена?

как должно быть сделано обнаружение браузера теперь, когда jQuery 1.3 устарел (и я предполагаю, что удален в будущей версии) $.браузер.msie и подобные?

я использовал это много для определения того, в каком браузере мы находимся для исправлений CSS для почти каждого браузера, таких как:

$.browser.opera
$.browser.safari
$.browser.mozilla

... ну я думаю, что это все они :)

места, где я его использую, я не уверен, какая проблема с браузером вызывает проблему, потому что много раз я просто пытаюсь чтобы исправить разницу в 1 px в браузере.

Edit: С новой функциональностью jQuery невозможно определить, находитесь ли вы в IE6 или IE7. Как определить это сейчас?

16 ответов


Я столкнулся с чем-то подобным, нет$.поддержка.ПНГ (стр. ЭЖ.), поэтому мне нужно использовать $.браузер.версия еще, может быть, мы можем просто продолжать просить больше $.поддержка.XXXX свойства, столько, сколько необходимо.


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

Итак, мой ответ-ничего не делать с этим, пока:)

edit: я даже предоставлю вам плагин для использования в будущем (не протестирован, скопирован из jquery источник):

(function($) {
    var userAgent = navigator.userAgent.toLowerCase();

    $.browser = {
        version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
        safari: /webkit/.test( userAgent ),
        opera: /opera/.test( userAgent ),
        msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
        mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
    };

})(jQuery);

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

описание:

добавлена в jQuery 1.3 коллекция свойства, представляющие присутствие различных функций браузера или жуки.

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

значения всей поддержки свойства определяются с помощью обнаружение функций (и не использовать форма браузера нюхает)


поддержка функций звучит хорошей идеей, но она будет работать только тогда, когда она поддерживает все возможные "ошибки". Как и у первого комментатора, нет поддержки$.png или поддержка$.шаг или поддержка$.ку-ку, или, о, Список можно продолжать. Проблема в том, что некоторый код, чтобы сделать один браузер совместимым, неизбежно будет выполняться браузером, который в этом не нуждается.


обнаружение браузера не устаревшим в jQuery. Дока страница С помощью jQuery.браузер, в которой говорится:

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

Deprecation значит " запланированное для будущего удаления."Этот совет о нюхании возможностей, а не пользовательских агентов-это просто хороший общий совет, а не конкретный для jQuery. Все они говорят о том, что они делают легче поступить правильно.

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

Я думаю, что путаница в этом возникла из-за того, что внутри jQuery больше не нюхает браузер. Но утилита API jQuery.браузер будет продолжать существовать.


function browserLessThanIE7(){
   return (/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32");
}

также может работать нормально... Этот проверяет версию 5, 5.5 и 6.

@Nate: изменить (5\.5) / 6 в 7, и он проверяет версию 7.


Я говорю, что это обратный инженер из кодовой базы jQuery 1.2.

см. Этот раздел кода:

jQuery.browser = {
    version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
    safari: /webkit/.test( userAgent ),
   opera: /opera/.test( userAgent ),
  msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
  mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

уважайте лицензии GPL и MIT и учитесь у кода. Не копируйте и не вставляйте.

или специально для обоняния IE6. Вы могли бы сделать:

function IsThisBrowserIE6() {
    return ((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined))
}

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

горизонтальное центрирование элемента с использованием автоматических полей работает для всех браузеров, кроме IE. Какую функцию я тестирую? Я понятия не имею. Но я знаю, в каком браузере он не работает.

Я вижу, почему обнаружение функций было бы полезно в определенных ситуациях, например. если браузер находится в режиме quirks / strict. Этот наилучшим компромиссом было бы использование обоих методов.

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


Почему не мог jquery.браузер будет переписан для использования jquery.поддержка внутреннего определения браузера на основе функций (возможно, дополненных текущими методами из jquery.браузер, где это необходимо), чтобы обеспечить удобное средство для выбора для семейства браузеров и версии, возможно, более надежным, чем сегодняшний jquery.браузер?


jQuery 1.3 заменил тестирование браузера.

честно говоря, я удивлен, как часто веб-разработчики обеспокоены тем, в каком браузере работает их сайт. За 10 лет веб-разработки я могу вспомнить несколько случаев, когда я заботился, не говоря уже о том, чтобы делать что-то другое. Наиболее распространенной причиной было то, что названные размеры шрифтов значительно отличаются между Firefox и IE (font-size: large намного больше в IE, чем FF), поэтому я использовал IEfix.css файл для исправьте это.

Возможно, вам стоит посмотреть на что лучше: CSS хаки или обнаружение браузера? для более тщательного обсуждения этой темы.

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

трудно сказать что-нибудь еще, не зная, почему вы заботитесь, если это IE, потому что вы, вероятно, найдете гораздо лучшее решение для того, что вы делаете.


попробуйте скрипт GeckoFix в http://code.labor8.eu/geckoFix, он обнаруживает Firefox ниже 3.0, поэтому вы можете настроить его так, как хотите (т. е. добавив к нему больше правил, таких как обнаружение Firefox 2, Firefox 3, Opera и Safari). Я думаю, это может быть то, что ты ищешь. Чтобы проверить агент пользователя, просто введите адресную строку javascript: alert (navigator.userAgent) и найти некоторые конкретные символы, которые вам нужно будет ввести в скрипт.


У меня есть кусок Javascript, который отлично работает в браузерах Mozilla и Webkit, а также IE8. Однако, в 6 и 7 брейков. Это не имеет ничего общего с CSS или плохим Javascript, но Дрянные поддержки IE

Я вижу, откуда люди приходят о проверке "функций" в отличие от обнюхивания браузера, однако функции, которые обнюхивание доступно для не имеют отношения к нарушающему коду, так в чем же разница между обнюхиванием браузера и функция нюхает, пока все функции не будут доступны в $.объект поддержки?


Я хотел бы отметить, что navigator.userAgent не очень надежен, в том смысле, что он легко модифицируется и может не представлять собой фактический браузер, просматривающий страницу. Это может быть одной из причин $.browser был исключен в первую очередь.

но ради вопроса предположим, что обнаружение браузера необходимы.

я столкнулся с этот очень крутой фрагмент от James Padolsey, который фактически различает Internet Explorers с помощью условных комментариев.

я скомпилировал небольшой фрагмент кода с вышеуказанным фрагментом и некоторым кодом из yepnope.js:

(function(window, doc) {
    window.detector = window.detector || (function() {
        var undef,
            docElement = doc.documentElement,       
            v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i'),
            isGecko = ( 'MozAppearance' in docElement.style ),
            isGeckoLTE18 = isGecko && !! doc.createRange().compareNode,
            isOpera = !! ( window.opera && toString.call( window.opera ) == '[object Opera]' ),
            isWebkit = ( 'webkitAppearance' in docElement.style ),
            isNewerWebkit = isWebkit && 'async' in doc.createElement('script');

            while (
                div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
                all[0]
            );

            return {
                isGecko: isGecko,
                isGeckoLTE18: isGeckoLTE18,
                isGeckoGT18: isGecko && ! isGeckoLTE18,
                isOpera: isOpera,
                isWebkit: isWebkit,
                isNewerWebkit: isWebkit && 'async' in doc.createElement('script'),
                isIE: ( v > 4 ),
                ieVersion: ( v > 4 ? v : undef )
            };
    }());
}(window, document));

это отличает браузеры по их возможностям.

только проблемы, в настоящее время я не могу сказать между Safari и Chrome (оба браузера Webkit), а также между версиями самих браузеров Gecko, Webkit и Opera.

Я знаю, что это не идеально, но это небольшое улучшение по сравнению с navigator.userAgent.


Это может быть не самый чистый способ для IE 6, но он, безусловно, работает и легко понять:

$(document).ready(function() {
    ie6catch = $.browser.msie + $.browser.version;
    if (ie6catch.indexOf("true6") == -1) {
        alert("This is not Internet Explorer 6");
    }
});

было бы неплохо добавить браузеры в качестве класса в тег body для css. Не уверен, что это работает, потому что я не запускаю windows, и у меня есть powerPC, но он должен поставить класс .ie6 для всех интернет-исследователей 6-9, не очень полезно. Использовать mooModernizr для всего остального.

if (Browser.Engine.trident) {

    var IEbrowser = $('body');

    IEbrowser.addClass('ie');

}​

var browser = {
        chrome: false,
        mozilla: false,
        opera: false,
        msie: false,
        safari: false
    };
    var sBrowser, sUsrAg = navigator.userAgent;
    if(sUsrAg.indexOf("Chrome") > -1) {
        browser.chrome = true;
    } else if (sUsrAg.indexOf("Safari") > -1) {
        browser.safari = true;
    } else if (sUsrAg.indexOf("Opera") > -1) {
        browser.opera = true;
    } else if (sUsrAg.indexOf("Firefox") > -1) {
        browser.mozilla = true;
    } else if (sUsrAg.indexOf("MSIE") > -1) {
        browser.msie = true;
    }
console.log(browser.msie);