Pregunta Problemas de WebKit con event.layerX y event.layerY


Me di cuenta de que recibí toneladas de advertencias desaprobadas en la última versión (canaria) de Chrome.

event.layerX y event.layerY están rotos y en desuso en WebKit. Se eliminarán del motor en el futuro cercano.

Parece que jQuery está jodiendo cosas.

Estoy usando: jquery-1.6.1.min.js.

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

PD

No puedo mostrar el código porque creo que es un error general, pero sospecho que las advertencias se lanzan cuando trato de acceder a un objeto jQuery o cuando jQuery intenta acceder al layerX / layerY (bueno, estoy bastante seguro de que ese es el caso considerando el error: P).

jQuery probablemente copia esas propiedades en el objeto jQuery.

Asi que...

¿Que esta pasando?

EDITAR

jQuery 1.7 está fuera y soluciona este problema.

Lee mas en su blog, aquí.


504
2017-10-19 17:30


origen


Respuestas:


¿¡Que esta pasando!?

"jQuery probablemente copia esas propiedades en el objeto jQuery". ¡Estás exactamente en lo correcto, así que parece que ya lo sabes! :)

Esperemos que jQuery actualice su código para dejar de tocar eso, pero al mismo tiempo WebKit debería haber sabido mejor que registrar una advertencia de obsolescencia en un evento (al menos en mi opinión). Un manejador de mousemove y tu consola explotan. :)

Aquí hay un boleto 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 la actualización de jQuery no soluciona el problema para usted, puede tener algo que ver con las extensiones / complementos utilizados como Jake indicó en su responder.


460
2017-10-20 04:45



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

La solución temporal es ejecutar este código antes de realizar un enlace de eventos 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

Ver el últimas pruebas de rendimiento para averiguar cuál es la forma más rápida de eliminar los accesorios del evento.


73
2017-10-20 22:21



La solución más corta a esto es este delineador:

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

28
2018-02-06 14:30



La enorme cantidad de estos mensajes (Acabo de recibir 80000 de ellos mientras uso gmail) es de hecho un error en Chrome.

Deberías protagonizar el problema en Chromium.


21
2017-11-14 23:50



También puede ser causado por extensiones de Chrome, así que revístelas si la actualización de jQuery no funciona.


14
2017-12-15 22:41



Aquí hay otra corrección de una línea, sin reemplazar la instancia original de $ .event.props (que puede o no ser una matriz), por si acaso :-)

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

5
2018-03-01 09:59



Lo he usado después de llamar a cualquier evento:

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

Eso funcionó para mí, no tengo mensajes de advertencia desde que hice este parche en mi código.


5
2018-01-24 06:58



Además de los problemas de configuración enumerados en las otras respuestas, este error puede ser provocado por un simple error en su propio código: olvidando el '#' desde un selector de identificación de jQuery.

Tenía un código que parecía

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

(perdiendo el # delante del "datenotset")

Además de (obviamente) no funcionar, activó este mensaje de error en Chrome.


4
2018-01-10 12:07



Me encontré con este problema en mi propio código. Resultó que estaba iterando sobre todas las propiedades en un objeto de evento como parte de una herramienta de depuración / inspección que estaba usando. En esta instancia en particular, estaba usando $ .extend de jQuery para clonar el objeto para su posterior inspección, pero creo que cualquiera de las técnicas de iteración estándar en los diversos toolkits habría activado la advertencia también.

Lo menciono aquí porque mi idea inicial de simplemente buscar en el código base para las instancias de layerX o layerY no ayudaba: la propiedad estaba siendo referenciada genéricamente, no por nombre.


3
2018-04-09 08:18