52 votes

erreur browser.msie après la mise à jour vers jQuery 1.9.1

J'utilise l'extrait suivant d'un script :

if ($.browser.msie && $.browser.version < 9) {
   extra = "?" + Math.floor(Math.random() * 3000);
}

Il fonctionne bien avec jQuery 1.8.3 .

Maintenant, j'ai mis à jour jQuery à la nouvelle version 1.9.1 pour utiliser un nouveau script.
Maintenant, je reçois l'erreur suivante :

TypeError : Impossible de lire la propriété 'msie' d'undefined

J'ai lu le journal des modifications de la nouvelle version de jQuery, mais rien n'a dû changer.
avec msie

Des bogues connus, des conseils ou des propositions ?

57voto

Johan Points 10310

Puisque $.browser est déprécié, voici une solution alternative :

/**
 * Returns the version of Internet Explorer or a -1
 * (indicating the use of another browser).
 */
function getInternetExplorerVersion()
{
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat( RegExp.$1 );
    }

    return rv;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
    }

    alert( msg );
}

Source :

Cependant, la raison pour laquelle il est déprécié est que jQuery veut que vous utilisiez détection de caractéristiques à la place.

Un exemple :

$("p").html("This frame uses the W3C box model: <span>" +
        jQuery.support.boxModel + "</span>");

Et enfin, le moyen le plus fiable de vérifier les versions d'IE :

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

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

    return v > 4 ? v : undef;

}());

37voto

kicaj Points 1111

$.browser a été déprécié dans la version 1.3 et supprimé dans la version 1.9.

Vous pouvez le vérifier en consultant le documentation .

13voto

Arun P Johny Points 151748

El jQuery.browser a été dépréciée précédemment et supprimée dans la version 1.9 avec beaucoup d'autres éléments dépréciés tels que .live .

Pour les projets et les bibliothèques externes qui souhaitent passer à la version 1.9 mais qui veulent toujours prendre en charge ces fonctionnalités, jQuery a publié un plugin de migration pour le moment.

Si vous avez besoin d'une rétrocompatibilité, vous pouvez utiliser plugin de migration .

12voto

user3144038 Points 81

Pour une simple détection d'IE, j'ai tendance à utiliser :

(/msie|trident/i).test(navigator.userAgent)

Consultez le site Microsoft Developer Network pour en savoir plus sur l'agent utilisateur IE : http://msdn.microsoft.com/library/ms537503.aspx

4voto

SpYk3HH Points 10533

Mise à jour ! Révision complète de la réponse pour le nouveau plugin !

Le plugin suivant a été testé dans tous les principaux navigateurs. Il fait un usage traditionnel de userAgent ficelle pour se rééquiper jQuery.browser uniquement si vous utilisez jQuery version 1.9 ou supérieure !

Il possède le traditionnel jQuery.browser.msie ainsi que quelques nouvelles propriétés, dont une propriété de type .mobile pour aider à déterminer si l'utilisateur se trouve sur un appareil mobile.

Note : Il ne s'agit pas d'un remplacement approprié des tests de fonctionnalité. Si vous prévoyez de prendre en charge une fonctionnalité spécifique sur un appareil spécifique, il est toujours préférable d'utiliser les tests de fonctionnalité traditionnels.

/** jQuery.browser
 *  @author J.D. McKinstry (2014)
 *  @description    Made to replicate older jQuery.browser command in jQuery versions 1.9+
 *  @see http://jsfiddle.net/SpYk3/wsqfbe4s/
 *
 *  @extends    jQuery
 *  @namespace  jQuery.browser
 *  @example    jQuery.browser.browser == 'browserNameInLowerCase'
 *  @example    jQuery.browser.version
 *  @example    jQuery.browser.mobile   @returns    BOOLEAN
 *  @example    jQuery.browser['browserNameInLowerCase']
 *  @example    jQuery.browser.chrome   @returns    BOOLEAN
 *  @example    jQuery.browser.safari   @returns    BOOLEAN
 *  @example    jQuery.browser.opera    @returns    BOOLEAN
 *  @example    jQuery.browser.msie @returns    BOOLEAN
 *  @example    jQuery.browser.mozilla  @returns    BOOLEAN
 *  @example    jQuery.browser.webkit   @returns    BOOLEAN
 *  @example    jQuery.browser.ua   @returns    navigator.userAgent String
 */
;;(function($){var a=$.fn.jquery.split("."),b;for(b in a)a[b]=parseInt(a[b]);if(!$.browser&&(1<a[0]||9<=a[1])){a={browser:void 0,version:void 0,mobile:!1};navigator&&navigator.userAgent&&(a.ua=navigator.userAgent,a.webkit=/WebKit/i.test(a.ua),a.browserArray="MSIE Chrome Opera Kindle Silk BlackBerry PlayBook Android Safari Mozilla Nokia".split(" "),/Sony[^ ]*/i.test(a.ua)?a.mobile="Sony":/RIM Tablet/i.test(a.ua)?a.mobile="RIM Tablet":/BlackBerry/i.test(a.ua)?a.mobile="BlackBerry":/iPhone/i.test(a.ua)?
a.mobile="iPhone":/iPad/i.test(a.ua)?a.mobile="iPad":/iPod/i.test(a.ua)?a.mobile="iPod":/Opera Mini/i.test(a.ua)?a.mobile="Opera Mini":/IEMobile/i.test(a.ua)?a.mobile="IEMobile":/BB[0-9]{1,}; Touch/i.test(a.ua)?a.mobile="BlackBerry":/Nokia/i.test(a.ua)?a.mobile="Nokia":/Android/i.test(a.ua)&&(a.mobile="Android"),/MSIE|Trident/i.test(a.ua)?(a.browser="MSIE",a.version=/MSIE/i.test(navigator.userAgent)&&0<parseFloat(a.ua.split("MSIE")[1].match(/[0-9\.]{1,}/)[0])?parseFloat(a.ua.split("MSIE")[1].match(/[0-9\.]{1,}/)[0]):
"Edge",/Trident/i.test(a.ua)&&/rv:([0-9]{1,}[\.0-9]{0,})/.test(a.ua)&&(a.version=parseFloat(a.ua.match(/rv:([0-9]{1,}[\.0-9]{0,})/)[1].match(/[0-9\.]{1,}/)[0]))):/Chrome/.test(a.ua)?(a.browser="Chrome",a.version=parseFloat(a.ua.split("Chrome/")[1].split("Safari")[0].match(/[0-9\.]{1,}/)[0])):/Opera/.test(a.ua)?(a.browser="Opera",a.version=parseFloat(a.ua.split("Version/")[1].match(/[0-9\.]{1,}/)[0])):/Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(a.ua)?(a.mobile="Kindle",
/Silk/i.test(a.ua)?(a.browser="Silk",a.version=parseFloat(a.ua.split("Silk/")[1].split("Safari")[0].match(/[0-9\.]{1,}/)[0])):/Kindle/i.test(a.ua)&&/Version/i.test(a.ua)&&(a.browser="Kindle",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].match(/[0-9\.]{1,}/)[0]))):/BlackBerry/.test(a.ua)?(a.browser="BlackBerry",a.version=parseFloat(a.ua.split("/")[1].match(/[0-9\.]{1,}/)[0])):/PlayBook/.test(a.ua)?(a.browser="PlayBook",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].match(/[0-9\.]{1,}/)[0])):
/BB[0-9]{1,}; Touch/.test(a.ua)?(a.browser="Blackberry",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].match(/[0-9\.]{1,}/)[0])):/Android/.test(a.ua)?(a.browser="Android",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].match(/[0-9\.]{1,}/)[0])):/Safari/.test(a.ua)?(a.browser="Safari",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].match(/[0-9\.]{1,}/)[0])):/Firefox/.test(a.ua)?(a.browser="Mozilla",a.version=parseFloat(a.ua.split("Firefox/")[1].match(/[0-9\.]{1,}/)[0])):
/Nokia/.test(a.ua)&&(a.browser="Nokia",a.version=parseFloat(a.ua.split("Browser")[1].match(/[0-9\.]{1,}/)[0])));if(a.browser)for(var c in a.browserArray)a[a.browserArray[c].toLowerCase()]=a.browser==a.browserArray[c];$.extend(!0,$.browser={},a)}})(jQuery);
/* - - - - - - - - - - - - - - - - - - - */

var b = $.browser;
console.log($.browser);    //    see console, working example of jQuery Plugin
console.log($.browser.chrome);

for (var x in b) {
    if (x != 'init')
        $('<tr />').append(
            $('<th />', { text: x }),
            $('<td />', { text: b[x] })
        ).appendTo($('table'));
}

table { border-collapse: collapse; }
th, td { border: 1px solid; padding: .25em .5em; vertical-align: top; }
th { text-align: right; }

textarea { height: 500px; width: 100%; }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table></table>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X