Problemas de WebKit con event.layerX y event.layerY

Resuelto PeeHaa asked hace 12 años • 9 respuestas

Me acabo de dar cuenta de que recibo toneladas de advertencias obsoletas en la última versión (canary) de Chrome.

event.layerX y event.layerY están rotos y en desuso en WebKit. Serán retirados del motor en un futuro próximo.

Parece que jQuery está arruinando todo.

Estoy usando: jquery-1.6.1.min.js.

¿Ayudaría actualizar a la última versión de jQuery o aún no está solucionado o es un error de Chrome o es algo más?

PD

No puedo mostrarte el código porque creo que es un error general, pero sospecho que las advertencias aparecen cuando intento acceder a un objeto jQuery o cuando jQuery intenta acceder a la capaX/capaY (bueno, estoy bastante seguro de que ese es el caso considerando el error :P).

jQuery probablemente copia esas propiedades en el objeto jQuery.

Entonces...

¿Qué está sucediendo?

EDITAR

jQuery 1.7 ya está disponible y soluciona este problema.

Lea más en su blog, aquí .

PeeHaa avatar Oct 20 '11 00:10 PeeHaa
Aceptado

¿¡Qué está sucediendo!?

"jQuery probablemente copia esas propiedades en el objeto jQuery". Tienes toda la razón, ¡parece que ya lo sabes! :)

Con suerte, jQuery actualizará su código para dejar de tocar eso, pero al mismo tiempo, WebKit debería haber sabido que no debía registrar una advertencia de obsolescencia en un evento (al menos en mi opinión). Un controlador de movimiento del mouse y tu consola explota. :)

Aquí hay un ticket jQuery reciente: http://bugs.jquery.com/ticket/10531

ACTUALIZACIÓN: Esto se soluciona ahora si actualiza a jQuery 1.7.

Tenga en cuenta que si actualizar jQuery no soluciona el problema, puede tener algo que ver con las extensiones/complementos usados, como lo indicó Jake en su respuesta .

Adam A avatar Oct 20 '2011 04:10 Adam A

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

La solución temporal es ejecutar este código antes de realizar cualquier enlace de evento a través de 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;
}());

ACTUALIZAR

Consulte las últimas pruebas de rendimiento para descubrir cuál es la forma más rápida de eliminar los accesorios del evento.

David Murdoch avatar Oct 20 '2011 22:10 David Murdoch

La solución más corta para esto es esta frase:

$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
mekwall avatar Feb 06 '2012 14:02 mekwall