WebKit问题与event.layerX和event.layerY

我只注意到,在Chrome的最新(canary)版本中,我收到了大量不推荐使用的警告。

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已经解决了这个问题。

在这里阅读更多的博客 。

这是怎么回事!?

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

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

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

更新:如果升级到jQuery 1.7,现在已经修复了。

请注意,如果升级jQuery不能解决您的问题,它可能与使用的扩展/插件有关,如杰克在他的答案中所述 。

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

UPDATE

查看最新的性能testing ,找出最快的方法是删除事件道具。

对此的最短的解决scheme是这一行:

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

大量的这些消息(我使用gmail的时候只有80000)是Chrome中的一个bug。

您应该在Chromium上标明问题 。

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

这里是另外一个行修正,不需要replace$ .event.props(可能是也可能不是数组)的原始实例,以防万一:-)

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

我在调用任何事件之后使用了这个:

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

这对我有用,我没有任何警告消息,因为我已经在我的代码上做了这个补丁。

除了其他答案中列出的configuration问题之外,这个错误可能是由你自己的代码中的一个简单错误触发的:忘记jQuery IDselect器中的“#”。

我有代码看起来像

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

(错过了“datenotset”前面的#)

以及(显然)失败,它在Chrome中触发了这个错误消息。

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

我在这里提到它,因为我最初的想法是简单地在代码库中searchlayerX或layerY的实例并没有帮助 – 该属性一般被引用,而不是名称。