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的实例并没有帮助 – 该属性一般被引用,而不是名称。