$.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中children()与find()的区别介绍
Apr 26 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
Aug 11 Javascript
一个js过滤空格的小函数
Oct 10 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
Jun 09 Javascript
js实现按钮颜色渐变动画效果
Aug 20 Javascript
js从外部获取图片的实现方法
Aug 05 Javascript
javascript中递归的两种写法
Jan 17 Javascript
js实现百度登录框鼠标拖拽效果
Mar 07 Javascript
JS中的三个循环小结
Jun 20 Javascript
VUE中v-model和v-for指令详解
Jun 23 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
Jan 30 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/05/11 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
jquery中文乱码的多种解决方法
2013/06/21 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
django如何实现视图重定向
2019/07/24 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
pytorch中的inference使用实例
2020/02/20 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
毕业自荐书
2013/12/09 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
工程主管竞聘书
2015/09/15 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL