10

在最新的 jquery 1.9 下运行时,我收到了即兴版本 4.1 的错误

未捕获的类型错误:无法读取未定义的属性“msie”

以前版本的 jquery 不是这种情况。

即兴的违规行是第 20 行:

var ie6 = ($.browser.msie && $.browser.version < 7);
4

7 回答 7

24

您可以修补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 的评论,你是对的。两个注意事项

  1. 此编辑行:

    var ie6 = ( navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/) );
    

    ...应该被这个替换:

    var ie6 = ( navigator.userAgent.match(/msie [6]/i) );
    

    ...我的错,我急于写补丁。这应该够了吧。

  2. Impromptu在他们的最后一次提交中完全删除了 IE6 支持(在 2013 年 3 月 25 日发布此原始帖子之后)。OP 带来的问题是Impromptu确实与 jQuery v1.9+ 发生了冲突……将Impromptu js 文件更新到最新版本也解决了这个问题

于 2013-01-24T23:44:42.203 回答
6

我更喜欢这个目标范围,将只在 < IE9 & jQuery 1.9+ 上运行代码

if (/msie [1-8]./.test(navigator.userAgent.toLowerCase()))
{
    //code here
}
于 2013-02-01T11:10:56.787 回答
2

自从 Jquery 弃用 $.browser 功能以来,我发现最简单的方法就是在 javascript 中创建一个全局变量

var LTE_IE9 = false;

和使用条件 HTML IE 选择器

<!--[if lte IE 9]>
<script>LTE_IE9 = true;</script>
<![endif]-->
于 2013-04-05T15:01:03.727 回答
0

正如这里所说,$.browser在 jQuery 中不再存在,因为版本1.9

所以在更新到 jQuery 1.9.1 后检查browser.msie 错误

于 2014-05-12T16:58:16.453 回答
0

我用这个。

  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;
    }
于 2013-10-09T13:59:22.580 回答
0

添加Jquery migrate插件

//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js

$.browser.msie从 > jquery 1.9.X 中删除

于 2013-11-27T07:33:01.603 回答
0

因为 $.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());

对我来说很好;

于 2014-07-23T12:10:05.463 回答