WebKit与event.layerX和event.layerY有关

Pee*_*Haa 508 jquery webkit google-chrome

我刚刚注意到我在最新的(金丝雀)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已经出来并解决了这个问题.

阅读更多内容,请访问他们的博客.

Ada*_*m A 463

这是怎么回事!?

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

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

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

更新:如果您升级到jQuery 1.7,现在已修复.

请注意,如果升级jQuery没有为您解决问题,它可能与使用的扩展/插件有关,正如Jake在他的回答中所述.

  • 我仍然在jQ 1.7.1中看到它们.所以似乎没有修复. (22认同)
  • @Neal在jQuery 1.7中将根据票据删除 (8认同)
  • 我仍然在jQ 1.7中看到它们 (7认同)
  • 我同意1.7.1,警告消失了!谢谢. (3认同)
  • 我已禁用所有扩展程序,但仍然会收到1.7.2的警告 (3认同)
  • 我没有在我的chrome上安装任何扩展,并且还有1.7.1,仍然有这个问题. (2认同)

Dav*_*och 74

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;
}());
Run Code Online (Sandbox Code Playgroud)

UPDATE

查看最新的性能测试,了解删除事件道具的最快方法.


mek*_*all 28

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

$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
Run Code Online (Sandbox Code Playgroud)


tör*_*kus 21

这些消息中的大量消息(我在使用gmail时只获得了80000个消息)确实是Chrome中的一个错误.

你应该在Chromium上解决这个问题.


Jak*_*ake 14

它也可能是由Chrome扩展引起的,因此请检查jQuery更新是否无效.


jca*_*258 5

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

$.event.props.splice($.event.props.indexOf("layerY"),1);
$.event.props.splice($.event.props.indexOf("layerX"),1);
Run Code Online (Sandbox Code Playgroud)

这对我有用,因为我在我的代码上制作了这个补丁,所以没有任何警告信息.


DUz*_*zun 5

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

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