$.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 相关文章推荐
JavaScript对象、属性、事件手册集合方便查询
Jul 04 Javascript
Jquery插件写法笔记整理
Sep 06 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
Oct 11 Javascript
JavaScript中的console.dir()函数介绍
Dec 29 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
Sep 01 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
Bootstrap栅格系统学习笔记
Nov 25 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
Vue和Bootstrap的整合思路详解
Jun 30 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 jQuery
使用webpack搭建pixi.js开发环境
Feb 12 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网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
javascript实现动态标签云
2015/10/16 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
javascript实现留言板功能
2020/02/08 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python中遍历文件的3个方法
2014/09/02 Python
python中map、any、all函数用法分析
2015/04/21 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
Python2包含中文报错的解决方法
2018/07/09 Python
利用python修改json文件的value方法
2018/12/31 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
python实现二维数组的对角线遍历
2019/03/02 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
客房主管岗位职责
2013/12/09 职场文书
承诺书格式
2014/06/03 职场文书
三八活动策划方案
2014/08/17 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
大学生实习推荐信
2015/03/27 职场文书
签字仪式主持词
2015/07/03 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
python基础之爬虫入门
2021/05/10 Python
mysql sql常用语句大全
2022/06/21 MySQL