$.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下弹出窗口的变通
Apr 18 Javascript
IE的fireEvent方法概述及应用
Feb 22 Javascript
Jquery刷新页面背景图片随机变换的实现方法
Mar 15 Javascript
node.js操作mongoDB数据库示例分享
Nov 26 Javascript
JS与jQ读取xml文件的方法
Dec 08 Javascript
实现React单页应用的方法详解
Aug 02 Javascript
jQuery Raty 一款不错的星级评分插件
Aug 24 Javascript
jQuery插件ajaxFileUpload异步上传文件
Oct 19 Javascript
Vue.js结合bootstrap实现分页控件
Mar 10 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
Jan 08 Javascript
iphone刘海屏页面适配方法
May 07 Javascript
jquery实现进度条状态展示
Mar 26 jQuery
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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
php中通过curl smtp发送邮件
2012/06/05 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
smarty中常用方法实例总结
2015/08/07 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
连接Python程序与MySQL的教程
2015/04/29 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python的Lambda函数用法详解
2019/09/03 Python
Python程序暂停的正常处理方法
2019/11/07 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
宣传保护环境的公益广告词
2014/03/13 职场文书
党的群众路线调研报告
2014/11/03 职场文书
个人工作保证书
2015/02/28 职场文书
用python画城市轮播地图
2021/05/28 Python
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python