Подтвердить что ты не робот

Как сделать обнаружение браузера с помощью jQuery 1.3 с $.browser.msie устаревшим?

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

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

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

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

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

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

4b9b3361

Ответ 1

Я столкнулся с чем-то похожим, там нет $.support.png(p.ej.), поэтому мне нужно использовать версию $.browser.version, возможно, мы можем просто продолжать запрашивать дополнительные свойства $.support.XXXX, насколько это необходимо.

Ответ 2

Да, обнаружение браузера устарело, но устаревшие свойства, вероятно, в ближайшее время не будут удалены из 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);

Ответ 3

.browser устарел в пользу .support. Более подробная информация здесь: jquery.support. Это в основном означает, что вместо использования браунинга, jquery теперь обнаруживает поддержку обнаружения и позволяет более тонкий контроль над тем, что может сделать браузер.

Из описания:

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

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

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

Ответ 4

Поддержка функции

звучит неплохо, НО она будет работать только так, как это предусмотрено, когда она поддерживает все возможные "ошибки". Как и первый комментатор, нет $support.png, или $support.stepping, или $support.peekaboo, или a, oh, список продолжается. Проблема заключается в том, что какой-то код, чтобы сделать один совместимый с браузером, неизбежным в конечном итоге будет выполняться браузером, который ему не нужен.

Ответ 5

Обнаружение браузера не устарело в jQuery. Doc для jQuery.browser, который гласит:

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

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

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

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

Ответ 6

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

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

@Nate: измените (5 \.5) | 6 на 7 и проверите для версии 7.

Ответ 7

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

Смотрите этот раздел кода:

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))
}

Ответ 8

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

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

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

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

Ответ 9

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

Ответ 10

jQuery 1.3 заменил проверку браузера.

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

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

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

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

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

Ответ 14

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

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

Я столкнулся с этот очень классный фрагмент Джеймса Падольси, который фактически отличает 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.

Ответ 15

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

if (Browser.Engine.trident) {

    var IEbrowser = $('body');

    IEbrowser.addClass('ie');

}​

Ответ 16

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);