$.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 相关文章推荐
解析arp病毒背后利用的Javascript技术附解密方法
Aug 06 Javascript
jQuery 对象中的类数组操作
Apr 27 Javascript
jquery阻止冒泡事件使用模拟事件
Sep 06 Javascript
JavaScript中的this关键字使用详解
Aug 14 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
Aug 28 Javascript
jQuery获取DOM节点实例分析(2种方式)
Dec 15 Javascript
BootStrap中Datepicker控件带中文的js文件
Aug 10 Javascript
学习掌握JavaScript中this的使用技巧
Aug 29 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
Feb 19 Javascript
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
Selenium执行JavaScript脚本的方法示例
Dec 31 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
javascript操作cookie
2017/01/17 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
Python装饰器用法实例分析
2019/01/14 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
会计专业应届生求职信
2013/11/24 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
好听的队名和口号
2014/06/09 职场文书
企业标语大全
2014/07/01 职场文书
九一八事变演讲稿
2014/09/05 职场文书
同意迁入证明模板
2014/10/26 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
js实现自动锁屏功能
2021/06/02 Javascript
java如何实现socket连接方法封装
2021/09/25 Java/Android
python 使用pandas读取csv文件的方法
2022/12/24 Python