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

J’utilise le snip suivant d’un script:

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

Cela fonctionne bien avec jQuery 1.8.3 .

Maintenant, j’ai mis à jour jQuery vers la nouvelle version 1.9.1 pour utiliser un nouveau script.
Maintenant, j’obtiens l’erreur suivante:

TypeError: impossible de lire la propriété ‘msie’ de undefined

J’ai lu le journal des modifications de la nouvelle version de jQuery, mais rien n’aurait dû changer
avec Msie

Des bugs connus, des astuces ou des propositions?

$.browser est $.browser obsolète dans la version 1.3 et supprimé dans la version 1.9

Vous pouvez le vérifier en consultant la documentation .

Puisque $ .browser est obsolète, 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 ); } 

La source

Cependant, la raison pour laquelle il est obsolète est que jQuery souhaite que vous utilisiez plutôt la détection de fonctionnalités .

Un exemple:

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

Et le dernier mais non le moindre, le moyen le plus fiable pour 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 = '', all[0] ); return v > 4 ? v : undef; }()); 

Les options jQuery.browser ont été abandonnées plus tôt et supprimées dans la version 1.9 avec de nombreux autres éléments obsolètes tels que .live .

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

Si vous avez besoin d’une compatibilité descendante, vous pouvez utiliser le plug-in de migration .

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

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

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

Inclure le plug-in de migration jQuery avec votre bibliothèque jQuery.

Mettre à jour! Refonte complète du nouveau plugin!

Le plugin suivant a été testé dans tous les principaux navigateurs. Il utilise traditionnellement la chaîne userAgent pour rééquiper jQuery.browser uniquement si vous utilisez la version 1.9 ou jQuery.browser jQuery !

Il possède les propriétés de type jQuery.browser.msie traditionnelles ainsi que quelques nouvelles, y compris une propriété .mobile pour vous aider à déterminer si l’utilisateur se trouve sur un périphérique mobile.

Remarque: Ceci ne remplace pas les tests de fonctionnalités. Si vous prévoyez de prendre en charge une fonctionnalité spécifique sur un périphérique spécifique, il est préférable d’utiliser les tests de fonctionnalités traditionnels.

 /** jQuery.browser * @author JD 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 Ssortingng */ ;;(function($){var a=$.fn.jquery.split("."),b;for(b in a)a[b]=parseInt(a[b]);if(!$.browser&&(1').append( $('', { text: x }), $('', { 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%; } 
  

Vous pouvez détecter le navigateur IE de cette manière.

(navigator.userAgent.toLowerCase().indexOf('msie 6') != -1)

vous pouvez obtenir la référence sur cette URL: jquery.browser.msie Alternative

En utilisant ceci:

if (navigator.userAgent.match (“MSIE”)) {}

Vous pouvez utiliser :

 var MSIE = jQuery.support.leadingWhitespace; // This property is not supported by ie 6-8 $(document).ready(function(){ if (MSIE){ if (navigator.vendor == 'Apple Computer, Inc.'){ // some code for this navigator } else { // some code for others browsers } } else { // default code }}); 

Au lieu d’avoir le script de migration complet ajouté, vous pouvez simplement append les éléments suivants (extraits du script de migration)

 $.uaMatch = function( ua ) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; 

et ensuite l'utiliser comme ça

 $.uaMatch(navigator.userAgent) 

J’ai eu ce problème aussi. Nous utilisions deux versions de Jquery (1.11.3 et 1.8.3), dont l’une provoquait ce problème. J’ai trouvé une version de lightbox_me.js qui fonctionnait sur les deux versions:

http://buckwilson.me/lightboxme/

C’était juste un remplacement facile d’un ancien fichier.