$.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 相关文章推荐
关于jquery性能最佳实践的讨论,与求教
Mar 30 Javascript
js字母大小写转换实现方法总结
Nov 13 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
吐槽一下我所了解的Node.js
Oct 08 Javascript
前端分页功能的实现以及原理(jQuery)
Jan 22 Javascript
浅析Angular2子模块以及异步加载
Apr 24 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
vue.js input框之间赋值方法
Aug 24 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
微信小程序的tab选项卡的实现效果
May 15 Javascript
js实现无缝轮播图
Mar 09 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 多线程上下文中安全写文件实现代码
2009/12/28 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
Javascript缓存API
2016/06/14 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
Vue中props的详解
2019/05/16 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
Python 一句话生成字母表的方法
2019/01/02 Python
Django choices下拉列表绑定实例
2020/03/13 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
超级实用的8个Python列表技巧
2020/08/24 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
数控技术应用个人求职信范文
2014/02/03 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
python读取mnist数据集方法案例详解
2021/09/04 Python