在最新的 jquery 1.9 下运行时,我收到了即兴版本 4.1 的错误
未捕获的类型错误:无法读取未定义的属性“msie”
以前版本的 jquery 不是这种情况。
即兴的违规行是第 20 行:
var ie6 = ($.browser.msie && $.browser.version < 7);
您可以修补Impromptu替换此行:
var ie6 = ($.browser.msie && $.browser.version < 7);
...通过这个:
var ie6 = ( navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/) );
...所以现在它可以与 jQuery v1.9.0+ 一起使用。或者,您可以回滚到 jQuery v1.8.3
编辑(2013 年 3 月 12 日)
感谢@johntrepreneur 的评论,你是对的。两个注意事项:
此编辑行:
var ie6 = ( navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/) );
...应该被这个替换:
var ie6 = ( navigator.userAgent.match(/msie [6]/i) );
...我的错,我急于写补丁。这应该够了吧。
Impromptu在他们的最后一次提交中完全删除了 IE6 支持(在 2013 年 3 月 25 日发布此原始帖子之后)。OP 带来的问题是Impromptu确实与 jQuery v1.9+ 发生了冲突……将Impromptu js 文件更新到最新版本也解决了这个问题。
我更喜欢这个目标范围,将只在 < IE9 & jQuery 1.9+ 上运行代码
if (/msie [1-8]./.test(navigator.userAgent.toLowerCase()))
{
//code here
}
自从 Jquery 弃用 $.browser 功能以来,我发现最简单的方法就是在 javascript 中创建一个全局变量
var LTE_IE9 = false;
和使用条件 HTML IE 选择器
<!--[if lte IE 9]>
<script>LTE_IE9 = true;</script>
<![endif]-->
正如这里所说,$.browser在 jQuery 中不再存在,因为版本1.9。
所以在更新到 jQuery 1.9.1 后检查browser.msie 错误
我用这个。
var browser = $.browser;
if ( ! browser ) {
var ua = navigator.userAgent.toLowerCase();
var m = /(msie) ([\w.]+)/.exec( ua ) || ! /compatible/.test(ua) && /(mozilla)/.exec( ua ) || [];
browser = { version: m[2] };
browser[ m[1] ] = true;
}
添加Jquery migrate
插件
//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js
$.browser.msie
从 > jquery 1.9.X 中删除
因为 $.browse 自 jQuery V. 1.4 以来已被弃用,并在 jQuery V. 1.9 之后被删除
您仍然可以通过这行代码解决此问题(适用于所有浏览器)
jQuery.browser = {};
jQuery.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit/.test(navigator.userAgent.toLowerCase());
jQuery.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase());
jQuery.browser.opera = /opera/.test(navigator.userAgent.toLowerCase());
jQuery.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());
对我来说很好;