$.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 相关文章推荐
js判断变量是否空值的代码
Oct 26 Javascript
Three.js源码阅读笔记(Object3D类)
Dec 27 Javascript
探讨js字符串数组拼接的性能问题
Oct 11 Javascript
整理Javascript基础语法学习笔记
Nov 29 Javascript
利用vue-router实现二级菜单内容转换
Nov 30 Javascript
Javascript中的神器——Promise
Feb 08 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
深入浅析var,let,const的异同点
Aug 07 Javascript
javascript的this关键字详解
May 20 Javascript
jquery检测上传文件大小示例
Apr 26 jQuery
vue首次渲染全过程
Apr 21 Vue.js
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根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
CI框架附属类用法分析
2018/12/26 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
基于Django统计博客文章阅读量
2019/10/29 Python
Series和DataFrame使用简单入门
2019/11/13 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
创立科技Java面试题
2015/11/29 面试题
实习生自荐信范文
2013/11/13 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
个人违纪检讨书
2014/09/15 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
JavaScript异步操作中串行和并行
2021/11/20 Javascript
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python