【问题标题】:Impromptu .. with jquery 1.9 - error with browser.msie即兴 .. 使用 jquery 1.9 - browser.msie 出错
【发布时间】:2013-01-08 21:17:00
【问题描述】:

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

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

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

即兴中的违规行是第20行:

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

【问题讨论】:

  • jQuery.browser:已弃用:1.3,已删除:1.9
  • 啊哈......所以即兴会打破每个人?
  • 如果该插件依赖于browser 属性,使用jQuery 1.9,是的。

标签: jquery impromptu


【解决方案1】:

你可以修补 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 的cmets,你是对的。 两个音符

  1. 此编辑行:

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

    ...应该用这个代替:

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

    ...我的错,我急于写补丁。这应该可以解决问题。

  2. Impromptu 在他们的 last commit 中完全删除了 IE6 支持(在 2013 年 3 月 25 日发布此原始帖子之后)。 OP 带来的问题是 Impromptu 确实与 jQuery v1.9+ 中断... Impromptu js 文件更新到 last version 也可以修复问题

【讨论】:

  • @undefined :我想所有相关实例都需要修补以作为解决方法。
  • 是的,实际上它只检查 IE6。 +1
  • @JFK 您的替换行不一样并且匹配不正确,因为它在 userAgent 字符串中找到任何“6”。我在 IE8 中对其进行了测试,并且您的检查匹配(当它不应该匹配时),因为 userAgent 字符串中包含“msie”并且在其他地方也包含“6”:“Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1 ;WOW64;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;媒体中心 PC 6.0;.NET4.0C;.NET4.0E)"。
  • 但是它返回了什么?真/假?
  • @SteveCav :如果您使用的是 IE6,则 var ie6 返回 true 否则 false
【解决方案2】:

我更喜欢这个目标范围,将只在

if (/msie [1-8]./.test(navigator.userAgent.toLowerCase()))
{
    //code here
}

【讨论】:

    【解决方案3】:

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

    var LTE_IE9 = false;
    

    以及使用条件 HTML IE 选择器

    <!--[if lte IE 9]>
    <script>LTE_IE9 = true;</script>
    <![endif]-->
    

    【讨论】:

    • 这其实很聪明。
    【解决方案4】:

    我用它。

      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;
        }
    

    【讨论】:

      【解决方案5】:

      添加Jquery migrate插件

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

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

      【讨论】:

        【解决方案6】:

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

        所以检查browser.msie error after update to jQuery 1.9.1

        【讨论】:

          【解决方案7】:

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

          对我来说很好用;

          【讨论】:

            猜你喜欢
            • 2011-07-24
            • 2012-08-22
            • 2013-01-31
            • 2011-08-30
            • 2013-07-07
            • 2013-01-06
            • 1970-01-01
            • 2012-04-10
            • 1970-01-01
            相关资源
            最近更新 更多