browser.msie错误更新到jQuery 1.9.1后

我使用下面的脚本片段:

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

它与jQuery 1.8.3工作正常。

现在我更新jQuery到新版本1.9.1使用一个新的脚本。
现在我得到以下错误:

TypeError:无法读取未定义的属性“msie”

我读了新的jQuery版本的更改日志,但没有任何改变
msie

任何已知的错误,提示或build议?

$.browser在版本1.3中被弃用,并在1.9中被删除

您可以通过查看文档来validation这一点。

由于$ .browser已被弃用,下面是一个替代解决scheme:

 /** * 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 ); } 

资源

但是,它被弃用的原因是因为jQuery希望你使用特征检测 。

一个例子:

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

最后但并非最不重要的,检查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; }()); 

jQuery.browser选项在之前已被弃用,并在1.9版本中被删除,还有很多其他不赞成的项目,如.live 。

对于想要升级到1.9但仍想支持这些function的项目和外部库,jQuery暂时发布了一个迁移插件。

如果您需要向后兼容,则可以使用迁移插件 。

对于简单的IE检测,我倾向于使用:

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

访问Microsoft Developer Network以了解IE useragent: http : //msdn.microsoft.com/library/ms537503.aspx

包括jQuery迁移插件以及您的jQuery库。

更新! 完整的回答大修新的插件!

以下插件已在所有主stream浏览器中进行过testing。 它使传统的使用userAgentstring重新装备jQuery.browser 只有当你使用jQuery版本1.9或更高

它具有传统的jQuery.browser.msietypes属性以及一些新属性,包括.mobile属性以帮助确定用户是否在移动设备上。

注意: 这不是functiontesting的合适替代品。 如果您希望支持特定设备上的特定function,则最好使用传统functiontesting

 /** 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 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> 

您可以通过这种方式检测IE浏览器。

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

你可以得到这个url的参考: jquery.browser.msie另类

使用这个:

如果(navigator.userAgent.match(“MSIE”)){}

您可以使用 :

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

而不是添加整个迁移脚本,您可以简单地添加以下(从迁移脚本中提取)

 $.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" }; }; 

然后像这样使用它

 $.uaMatch(navigator.userAgent) 

我也有这个问题。 我们使用了两个版本的Jquery(1.11.3和1.8.3),其中之一导致了这个问题。 我发现一个lightbox_me.js版本可以在两个版本上工作:

http://buckwilson.me/lightboxme/

这只是一个简单的replace旧文件。