$.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 相关文章推荐
ie和firefox不兼容的解决方法集合
Apr 28 Javascript
Mootools 1.2教程 设置和获取样式表属性
Sep 15 Javascript
jQuery select操作控制方法小结
May 26 Javascript
jQuery数据显示插件整合实现代码
Oct 24 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
微信小程序组件 marquee实例详解
Jun 23 Javascript
VUE中使用Vue-resource完成交互
Jul 21 Javascript
详解vue移动端项目代码拆分记录
Mar 15 Javascript
vue-socket.io跨域问题有效解决方法
Feb 11 Javascript
JS this关键字在ajax中使用出现问题解决方案
Jul 17 Javascript
js加减乘除精确运算方法实例代码
Jan 17 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
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
简单的php购物车代码
2020/06/05 PHP
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
python读取文件名并改名字的实例
2019/01/07 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python pandas用法最全整理
2019/08/04 Python
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
狼和鹿教学反思
2014/02/05 职场文书
给学校的建议书
2014/03/12 职场文书
气象学专业个人求职信
2014/04/22 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
自我评价优缺点范文
2015/03/11 职场文书
运动会广播稿200字
2015/08/19 职场文书
话题作文之诚信
2019/11/28 职场文书