J'utilise la copie suivante d'un script:
if ($.browser.msie && $.browser.version < 9) {
extra = "?" + Math.floor(Math.random() * 3000);
}
Cela fonctionne très 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 non définie
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 déconseillé 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 );
}
Cependant, la raison pour laquelle il est obsolète est que jQuery souhaite que vous utilisiez feature detection .
Un exemple:
$("p").html("This frame uses the W3C box model: <span>" +
jQuery.support.boxModel + "</span>");
Et le dernier mais non le moindre, le moyen le plus fiable de vérifier les versions de 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;
}());
Les options jQuery.browser ont été déconseillées plus tôt et supprimées dans la version 1.9 avec de nombreux autres éléments déconseillés comme .live .
Pour les projets et les bibliothèques externes qui souhaitent passer à la version 1.9 mais souhaitent tout de même prendre en charge ces fonctionnalités, jQuery propose un plug-in de migration pour le moment.
Si vous avez besoin d'une compatibilité ascendante, vous pouvez utiliser plugin de migration .
Pour la détection simple IE, j'ai tendance à utiliser:
(/msie|trident/i).test(navigator.userAgent)
Consultez le site Web des développeurs Microsoft pour en savoir plus sur l'agent d'utilisateur IE: http://msdn.Microsoft.com/library/ms537503.aspx .
Incluez le plugin de migration jQuery avec votre bibliothèque jQuery.
Mettre à jour! Refonte complète de la réponse pour le nouveau plugin!
Le plugin suivant a été testé dans tous les principaux navigateurs. Il utilise habituellement la chaîne userAgent
pour rééquiper jQuery.browser
uniquement si vous utilisez jQuery version 1.9 ou supérieure!
Il possède les propriétés de type jQuery.browser.msie
traditionnelles ainsi que quelques nouvelles propriétés, notamment une propriété .mobile
pour vous aider à déterminer si l'utilisateur se trouve sur un appareil mobile.
Remarque: Ce n'est pas un remplacement approprié pour le test de fonctionnalité. Si vous envisagez de prendre en charge une fonctionnalité spécifique sur un périphérique spécifique, il est préférable d'utiliser le test de fonctionnalité traditionnel.
/** 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>
Vous pouvez détecter le navigateur IE de cette manière.
(navigator.userAgent.toLowerCase().indexOf('msie 6') != -1)
vous pouvez obtenir une 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'ajouter l'ensemble du script de migration, vous pouvez simplement ajouter 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 si
$.uaMatch(navigator.userAgent)
J'ai eu ce problème aussi. Nous utilisions deux versions de Jquery (1.11.3 et 1.8.3), l'une d'entre elles étant à l'origine de ce problème. J'ai trouvé une version lightbox_me.js qui fonctionnait sur les deux versions:
http://buckwilson.me/lightboxme/
C'était simplement un remplacement facile d'un ancien fichier.