当前位置: 移动技术网 > IT编程>开发语言>JavaScript > $.browser.msie 为空或不是对象问题的多种解决方法

$.browser.msie 为空或不是对象问题的多种解决方法

2019年03月20日  | 移动技术网IT编程  | 我要评论
'$.browser.msie' 为空或不是对象,这个是jquery错误 出现这个错误,是因为升级了jquery版本,从1.9以前升级到1.9以后,因为$.browser

'$.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 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;}})();

以上就是移动技术网小编整理的解决方法了,大家可以根据项目需要选择比较简单的。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网