【问题标题】:WebKit issues with event.layerX and event.layerYWebKit 与 event.layerX 和 event.layerY 的问题
【发布时间】:2012-01-26 15:01:41
【问题描述】:

我刚刚注意到,我在最新的(金丝雀)Chrome 版本中收到了大量已弃用的警告。

event.layerX 和 event.layerY 在 WebKit 中被破坏和弃用。它们将在不久的将来从引擎中移除。

看起来 jQuery 搞砸了。

我正在使用:jquery-1.6.1.min.js

升级到最新的 jQuery 版本是否有帮助,或者它还没有修复,或者它是 Chrome 错误还是其他什么。

PS

我无法向您显示代码,因为我认为这是一个一般错误,但我怀疑当我尝试访问 jQuery 对象或 jQuery 尝试访问 layerX / layerY 时会引发警告(我很确定这是考虑错误的情况:P)。

jQuery 可能会将这些属性复制到 jQuery 对象中。

所以...

发生了什么事?

编辑

jQuery 1.7 已经发布并修复了这个问题。

阅读更多at their blog, here

【问题讨论】:

  • 今天也注意到了这一点。
  • jQuery 1.7 仍然抛出警告似乎还没有修复......
  • @Stuart.Sklinar 我不知道你是否也用 PHP 编码,但如果你这样做了,我很确定你也会使用 @ 来抑制错误。
  • chrome 仅在没有中间错误的情况下对类似错误进行分组。所以问题是真的,它使使用控制台进行调试变得更加麻烦。它很刺激,但到目前为止我不认为任何 jQuery 功能实际上被破坏了
  • 值得注意的是,对于后人来说,WebKit (bug 86264) 已经放弃了弃用 layerXlayerY 的决定,至少在他们给予更仔细的考虑之前是这样。还值得注意的是,IE 最近 added layerXlayerY 直到版本 9 才拥有它。我的猜测是这些属性不会消失 - 至少直到有合适的 W3C 替代品,不会很快。警告在最新版本的 WebKit 中消失了。

标签: jquery google-chrome webkit


【解决方案1】:

发生了什么事!?

“jQuery 可能会将这些属性复制到 jQuery 对象中。”你是完全正确的,所以听起来你已经知道了! :)

希望 jQuery 将更新他们的代码以停止触及它,但同时 WebKit 应该知道比在事件上记录弃用警告更好(至少在我看来)。一个 mousemove 处理程序和您的控制台爆炸。 :)

这是最近的 jQuery 票证:http://bugs.jquery.com/ticket/10531

更新:如果您升级到 jQuery 1.7,现在已修复此问题。

请注意,如果升级 jQuery 不能为您解决问题,则可能与 Jake 在其answer 中所说的使用的扩展/插件有关。

【讨论】:

    【解决方案2】:

    http://jsperf.com/removing-event-props/2

    临时解决方法是在通过 jQuery 进行任何事件绑定之前运行此代码:

    (function(){
        // remove layerX and layerY
        var all = $.event.props,
            len = all.length,
            res = [];
        while (len--) {
          var el = all[len];
          if (el != 'layerX' && el != 'layerY') res.push(el);
        }
        $.event.props = res;
    }());
    

    更新

    查看latest performance tests,了解移除事件道具的最快方法。

    【讨论】:

      【解决方案3】:

      这些消息的数量巨大(我在使用gmail时收到了80000条)确实是Chrome中的一个错误。

      你应该给issue on Chromium加注星标。

      【讨论】:

        【解决方案4】:

        也可能是 Chrome 扩展引起的,如果 jQuery 更新不起作用,请检查它们。

        【讨论】:

          【解决方案5】:

          除了其他答案中列出的配置问题外,此错误可能由您自己的代码中的一个简单错误触发:忘记 jQuery ID 选择器中的“#”。

          我的代码看起来像

          $('datenotset_2341').click(function(){
           ....etc....
          });
          

          (遗漏了“datenotset”前面的#)

          除了(显然)无法工作外,它还在 Chrome 中触发了此错误消息。

          【讨论】:

            【解决方案6】:

            我在调用任何事件后都使用过这个:

            $.event.props.splice($.event.props.indexOf("layerY"),1);
            $.event.props.splice($.event.props.indexOf("layerX"),1);
            

            这对我有用,自从我在我的代码上制作了这个补丁后,我没有任何警告消息。

            【讨论】:

              【解决方案7】:

              对此的最短解决方案是这个单行:

              $.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
              

              【讨论】:

                【解决方案8】:

                这是另一行修复,没有替换 $.event.props 的原始实例(可能是也可能不是数组),以防万一:-)

                $.each(["layerX","layerY"], function(i,v) { if((i=p.indexOf(v)) > -1) $.fn.splice.call($.event.props,i,1) })
                

                【讨论】:

                  【解决方案9】:

                  我在自己的代码中遇到了这个问题。事实证明,作为我正在使用的调试/检查工具的一部分,我正在迭代事件对象上的所有属性。在这个特定的例子中,我使用 jQuery 的 $.extend 来克隆对象以供以后检查,但我相信各种工具包中的任何标准迭代技术也会触发警告。

                  我在这里提到它是因为我最初的想法是简单地在代码库中搜索 layerX 或 layerY 的实例并没有帮助 - 该属性是通用引用的,而不是按名称引用的。

                  【讨论】:

                    猜你喜欢
                    • 2012-04-20
                    • 2012-01-20
                    • 1970-01-01
                    • 2011-12-22
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多