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


Posted in Javascript onMarch 19, 2017

'$.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下亲测可用

原文地址:http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser

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

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

Javascript 相关文章推荐
SOSO地图API使用(一)在地图上画圆实现思路与代码
Jan 15 Javascript
jquery获得keycode的示例代码
Dec 30 Javascript
js Dialog 去掉右上角的X关闭功能
Apr 23 Javascript
jQuery中;function($,undefined) 前面的分号的用处
Dec 17 Javascript
jQuery+PHP实现动态数字展示特效
Mar 14 Javascript
详解javascript函数的参数
Nov 10 Javascript
Node.js插件安装图文教程
May 06 Javascript
JS脚本实现动态给标签控件添加事件的方法
Jun 02 Javascript
node.js中debug模块的简单介绍与使用
Apr 25 Javascript
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
VUE 3D轮播图封装实现方法
Jul 03 Javascript
vue数据响应式原理知识点总结
Feb 16 Javascript
JavaScript数据结构之链表的实现
Mar 19 #Javascript
用jQuery实现圆点图片轮播效果
Mar 19 #Javascript
Bootstrap 网格系统布局详解
Mar 19 #Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 #Javascript
JSONP基础知识详解
Mar 19 #Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 #Javascript
js实现旋转木马效果
Mar 17 #Javascript
You might like
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
js玩一玩WSH吧
2007/02/23 Javascript
js 加载时自动调整图片大小
2008/05/28 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
js实现小时钟效果
2020/03/25 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Python3+Appium安装使用教程
2019/07/05 Python
python线程join方法原理解析
2020/02/11 Python
什么是Python中的匿名函数
2020/06/02 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
财务会计实习报告体会
2013/12/20 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
招股说明书范本
2014/05/06 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
我的生日感言
2015/08/03 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
MySQL中order by的使用详情
2021/11/17 MySQL
在Docker容器中部署SQL Server
2022/04/11 Servers