$.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来判断,在网上找了一些能够直接替换的解决办法
$.browser.mozilla = /firefox/.test(navigator.useragent.tolowercase()); $.browser.webkit = /webkit/.test(navigator.useragent.tolowercase()); $.browser.opera = /opera/.test(navigator.useragent.tolowercase()); $.browser.msie = /msie/.test(navigator.useragent.tolowercase());
等号后面的表达式返回的就是 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 = object.prototype.tostring.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; alert("isblink:"+isblink);
解决方法四:
最近把一个项目的jquery升级到最新版,发现有些页面报如下错误
cannot read property 'msie' of undefined
上jquery网站上搜了一下,原因是$.browser这个api从jquery1.9开始就正式废除,js代码里只要用到$.browser就会报这个错。具体说明参见jquery官方说明。
楼主顺便扩展阅读了一下,发现jquery 1.9把所有在之前版本里标记为deprecated的api都正式删除了,彻底不再向后兼容。对于升级到最新jquery的童鞋而言,这意味着得花费一些额外的时间把代码升级使用新的api,或者自己另外实现这些被删除的方法。幸运的是,jquery团队意识到了这个break change带来的种种不便,推出了一个叫jquery migrate插件,用于能够自动恢复那些在最新版本里被废弃的api。只要引用了这个插件,已有的js代码无须改动就能和最新的jquery库一起正常运行。
下面是具体的解决方法,首先要下载jquery migrate插件,然后在引用jquery js的地方之后加上对jquery migrate js文件的引用即可。
<script src="http://code.jquery.com/jquery-1.10.2.js"></script> <script src="http://code.jquery.com/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;}})();
以上就是小编整理的解决方法了,大家可以根据项目需要选择比较简单的。
上一篇: 详解nodejs中的process进程