Обнаружение браузера jQuery? - PullRequest
19 голосов
/ 21 декабря 2010

Есть ли хороший способ определить, является ли браузер пользователя Internet Explorer использующим jQuery?

У меня проблема с графикой PNG с использованием IE, и я хочу поменять их на GIF, только если пользователь просматривает сайт с помощью IE.

Ответы [ 8 ]

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

Вы можете , используя $.browser, да, но использование обнаружения в браузере - плохая идея:

if($.browser.msie) { /* IE */ }

Лучшим вариантом, например, будет $.support, то есть функция обнаружение, например:

if(!$.support.opacity) { /* IE 6-8 */ }

$.support.opacity неверно в браузерах, которые не поддерживают opacity в стилях (хотя IE 7-8 обрабатывает прозрачный файл PNG, так что это все же не идеально, в зависимости от того, что вы ищете ... лично Я думаю, вы дадите пользователям IE 7/8 неоптимальный опыт.

Что вы должны действительно сделать, это целевой IE6, который не поддерживает прозрачные PNG (без альфа-фильтра), например:

<!--[if IE 6]>
  <link rel="stylesheet" type="text/css" href="IE6ImageStyles.css">
<![endif]-->
7 голосов
/ 21 декабря 2010

Да, вы можете, но они предпочитают использовать jQuery.support: http://api.jquery.com/jQuery.support/.

В этом случае используйте jQuery.support.opacity.

Редактировать: конечно, если речь идет о непрозрачности.

3 голосов
/ 30 января 2013
Браузер

$. Был удален в 1.9 , так как теперь предполагается, что обнаружение функции предпочтительнее через $ .support

2 голосов
/ 12 марта 2013

Для лучшего обнаружения браузера jQuery настоятельно рекомендует использовать внешнюю библиотеку, такую ​​как Modernizr вместо зависимости от свойств в jQuery.support или устаревшей jQuery.browser (удалено с версии 1.9)

1 голос
/ 25 мая 2012
$.browser.webkit
$.browser.safari
$.browser.opera
$.browser.msie
$.browser.mozilla

if ($.browser.msie) {
        //do something
}
else if ($.browser.mozilla) {
        //do something else
}

работает с jQuery 1.3

0 голосов
/ 21 декабря 2010

Я понимаю, что это не ответ - но я не могу опубликовать это в комментарии!

Если вы собираетесь использовать javascript, этот код исправляет проблему png с ie6. Я не очень много его использовал, но на самом деле вам нужно прозрачное gif-изображение под названием x.gif, а все остальное будет сделано автоматически.

// JavaScript Document

var supersleight    = function() {

    var root = false;
    var applyPositioning = true;

    // Path to a transparent GIF image
    var shim            = 'x.gif';

    // RegExp to match above GIF image name
    var shim_pattern    = /x\.gif$/i;



    var fnLoadPngs = function() { 
        if (root) {
            root = document.getElementById(root);
        }else{
            root = document;
        }
        for (var i = root.all.length - 1, obj = null; (obj = root.all[i]); i--) {
            // background pngs
            if (obj.currentStyle.backgroundImage.match(/\.png/i) !== null) {
                bg_fnFixPng(obj);
            }
            // image elements
            if (obj.tagName=='IMG' && obj.src.match(/\.png$/i) !== null){
                el_fnFixPng(obj);
            }
            // apply position to 'active' elements
            if (applyPositioning && (obj.tagName=='A' || obj.tagName=='INPUT') && obj.style.position === ''){
                obj.style.position = 'relative';
            }
        }
    };

    var bg_fnFixPng = function(obj) {
        var mode = 'scale';
        var bg  = obj.currentStyle.backgroundImage;
        var src = bg.substring(5,bg.length-2);
        if (obj.currentStyle.backgroundRepeat == 'no-repeat') {
            mode = 'crop';
        }
        obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')";
        obj.style.backgroundImage = 'url('+shim+')';
    };

    var el_fnFixPng = function(img) {
        var src = img.src;
        img.style.width = img.width + "px";
        img.style.height = img.height + "px";
        img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
        img.src = shim;
    };

    var addLoadEvent = function(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                if (oldonload) {
                    oldonload();
                }
                func();
            };
        }
    };

    return {
        init: function() { 
            addLoadEvent(fnLoadPngs);
        },

        limitTo: function(el) {
            root = el;
        },

        run: function() {
            fnLoadPngs();
        }
    };
}();

// limit to part of the page ... pass an ID to limitTo:
// supersleight.limitTo('header');

supersleight.init();
0 голосов
/ 21 декабря 2010
<script>
    jQuery.each(jQuery.browser, function(i, val) {
      $("<div>" + i + " : <span>" + val + "</span>")
                .appendTo(document.body);
    });</script>

$. Browser.msie
для IE

0 голосов
/ 21 декабря 2010

Проверьте функцию $.browser.

Чтобы обнаружить IE, вы также можете и лучше пойти на Условные комментарии IE .

Пример:

<!--[if IE]>
  Special instructions for IE here
<![endif]-->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...