ChatGPT解决这个技术问题 Extra ChatGPT

WebKit 与 event.layerX 和 event.layerY 的问题

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

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

看起来 jQuery 搞砸了。

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

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

附言

我无法向您展示代码,因为我认为这是一个一般性错误,但我怀疑当我尝试访问 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 中消失了。

C
Community

这是怎么回事!?

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

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

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

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

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


P
PeeHaa

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,了解删除事件道具的最快方法。


P
Peter Mortensen

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

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

t
törzsmókus

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

您应该为 issue on Chromium 加注星标。


P
Peter Mortensen

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


D
DUzun

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

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

P
Peter Mortensen

我在调用任何事件后使用了它:

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

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


x
xgretsch

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

我的代码看起来像

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

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

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


K
Kris Giesing

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

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