欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-30 11:10:50
'$.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官方说明

楼主顺便扩展阅读了一下,发现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;}})();

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