$.browser.msie为空或不是对象问题的多种解决⽅法
'$.browser.msie' 为空或不是对象,这个是jQuery错误
出现这个错误,是因为升级了jQuery版本,从1.9以前升级到1.9以后,因为$.browser.msie在1.9以后的jQuery中不存在了,所以报错。
jQuery 1.9 移除了 $.browser 的替代⽅法
$.browser是通过正则表达式来匹配userAgent来判断浏览器版本和种类的.jquery1.3.2版本的⽂档中已经声明jquery.browser及jquery.browser.version建议弃⽤,可以使⽤jquery.support来代替。
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version ,取⽽代之的是 $.support 。在更新的 2.0 版本中,将不再⽀持 IE 6/7/8。以后,如果⽤户需要⽀持IE 6/7/8,只能使⽤ jQuery 1.9或者jQuery 1.10.1等。如果要全⾯⽀持 IE,并混合使⽤ jQuery 1.9 和 2.0,官⽅的解决⽅案是:
解决⽅法⼀:
<!--[if lt IE 9]>
<script src='/jquery-1.10.1.min.js'></script>
<![endif]-->
<!--[if gte IE 9]>
<script src='/jquery-2.0.2.min.js'></script>
<![endif]-->
解决⽅法⼆:
就是不要⽤$.browser.msie来判断,在⽹上了⼀些能够直接替换的解决办法
$.illa = /firefox/.test(LowerCase());
$.browser.webkit = /webkit/.test(LowerCase());
$.browser.opera = /opera/.test(LowerCase());
$.browser.msie = /msie/.test(LowerCase());
等号后⾯的表达式返回的就是 true/false,可以直接⽤来替换原来的 $.browser.msie 等。
检查是否为 IE6:
// Old
if ($.browser.msie && 7 > $.browser.version) {}
// New
if ('undefined' == typeof(document.body.style.maxHeight)) {}
检查是否为 IE 6-8:
$.support.leadingWhitespace为IE中特有的属性,因此可以利⽤$.support.leadingWhitespace来判断浏览器是否是IE6-8
代码⼀
if (!$.support.leadingWhitespace) {}
代码⼆
$(function($){
var ieFlag= $.support.leadingWhitespace;//定义判断IE8的变量
if(!ieFlag){//IE8以下
//IE代码
}else{
//其他代码
}
});
解决⽅法三
/*后发现的判断浏览器类型通⽤类型*/⽼外写的⼀篇⽂章,在IE、Firefox、Google下亲测可⽤
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
alert("isFirefox:"+isFirefox);
// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
alert("isOpera:"+isOpera);
// Safari <= 9 "[object HTMLElementConstructor]"
var isSafari = String.call(window.HTMLElement).indexOf('Constructor') > 0;
alert("isSafari:"+isSafari);
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/ false || !!document.documentMode;
alert("isIE:"+isIE);
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
alert("isEdge:"+isEdge);
// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;
alert("isChrome:"+isChrome);
// Blink engine detection(7)
var isBlink = (isChrome || isOpera) && !!window.CSS;
jquery是什么选择器alert("isBlink:"+isBlink);
解决⽅法四:
最近把⼀个项⽬的jQuery升级到最新版,发现有些页⾯报如下错误
Cannot read property 'msie' of undefined
上jQuery⽹站上搜了⼀下,原因是$.browser这个api从jQuery1.9开始就正式废除,js代码⾥只要⽤到$.browser就会报这个错。具体说明参见。
楼主顺便扩展阅读了⼀下,发现jQuery 1.9把所有在之前版本⾥标记为deprecated的api都正式删除了,彻底不再向后兼容。对于升级到最新jQuery的童鞋⽽⾔,这
意味着得花费⼀些额外的时间把代码升级使⽤新的api,或者⾃⼰另外实现这些被删除的⽅法。幸运的是,jQuery团队意识到了这个break change带来的种种不
便,推出了⼀个叫jQuery Migrate插件,⽤于能够⾃动恢复那些在最新版本⾥被废弃的API。只要引⽤了这个插件,已有的js代码⽆须改动就能和最新的jQuery库⼀起正常运⾏。
下⾯是具体的解决⽅法,⾸先要下载jQuery Migrate插件,然后在引⽤jQuery js的地⽅之后加上对jQuery Migrate js⽂件的引⽤即可。
<script src="code.jquery/jquery-1.10.2.js"></script>
<script src="code.jquery/jquery-migrate-1.2.1.js"></script>
⽤jQuery Migrate的解决⽅法虽然简单⽆脑,但是会导致增加⼀个额外的js库。对于不喜欢增加额外js库的童鞋,请注意下⾯代码加载位置为:jQuery⽂件之
后,$.browser的代码之前。
jQuery.browser={};(function(){jQuery.browser.msie=false; jQuery.browser.version=0;if(navigator.userAgent.match(/MSIE ([0-9]+)./)){ jQuery.browser.msie=true;jQuery.browser.version=RegExp.$1;}})();以上就是⼩编整理的解决⽅法了,⼤家可以根据项⽬需要选择⽐较简单的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论