Question Problèmes WebKit avec event.layerX et event.layerY


Je viens de remarquer que je reçois des tonnes d'avertissements obsolètes dans la dernière version (canary) de Chrome.

event.layerX et event.layerY sont cassés et obsolètes dans WebKit. Ils seront retirés du moteur dans un proche avenir.

On dirait que jQuery est en train de baiser.

J'utilise: jquery-1.6.1.min.js.

Cela aiderait-il à mettre à jour vers la dernière version de jQuery ou n'est-il pas encore résolu ou est-ce un bug de Chrome ou est-ce autre chose?

PS

Je ne peux pas vous montrer le code parce que je pense que c'est une erreur générale, mais je soupçonne que les avertissements sont lancés lorsque j'essaie d'accéder à un objet jQuery ou lorsque jQuery tente d'accéder au layerX / layerY. erreur: P).

jQuery copie probablement ces propriétés dans l'objet jQuery.

Alors...

Que se passe-t-il?

MODIFIER

jQuery 1.7 est sorti et corrige ce problème.

Lire la suite sur leur blog, ici.


504
2017-10-19 17:30


origine


Réponses:


Que se passe-t-il!?

"jQuery copie probablement ces propriétés dans l'objet jQuery." Vous avez exactement raison, alors il semble que vous le sachiez déjà! :)

Espérons que jQuery mettra à jour son code pour ne plus y toucher, mais WebKit aurait dû savoir mieux que de consigner un avertissement de dépréciation sur un événement (du moins à mon avis). Un gestionnaire de mousemove et votre console explose. :)

Voici un ticket jQuery récent: http://bugs.jquery.com/ticket/10531

UPDATE: Ceci est corrigé maintenant si vous passez à jQuery 1.7.

Veuillez noter que si la mise à niveau de jQuery ne résout pas le problème pour vous, cela peut avoir un rapport avec les extensions / plugins utilisés comme Jake l'a déclaré dans son répondre.


460
2017-10-20 04:45



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

Le correctif temporaire consiste à exécuter ce code avant de faire une liaison d'événement via 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;
}());

METTRE À JOUR

Voir le derniers tests de performance pour savoir quel est le moyen le plus rapide pour supprimer les accessoires de l'événement.


73
2017-10-20 22:21



La solution la plus courte à ceci est ce one-liner:

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

28
2018-02-06 14:30



L'énorme quantité de ces messages (Je viens d'en avoir 80000 en utilisant Gmail) est en effet un bug dans Chrome.

Vous devriez jouer le question sur Chromium.


21
2017-11-14 23:50



Il peut également être provoqué par les extensions Chrome, vérifiez-les si la mise à jour de jQuery ne fonctionne pas.


14
2017-12-15 22:41



Voici une autre correction de ligne, sans remplacer l'instance d'origine de $ .event.props (qui peut être ou ne pas être un tableau), juste au cas où :-)

$.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



Je l'ai utilisé après avoir appelé un événement:

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

Cela a fonctionné pour moi, je n'ai aucun message d'avertissement depuis que j'ai fait ce patch sur mon code.


5
2018-01-24 06:58



Outre les problèmes de configuration répertoriés dans les autres réponses, cette erreur peut être déclenchée par une simple erreur dans votre propre code: en oubliant le '#' d'un sélecteur d'ID jQuery.

J'ai eu le code ressemblant

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

(manque le # devant le "datenotset")

En plus (évidemment) de ne pas fonctionner, il a déclenché ce message d'erreur dans Chrome.


4
2018-01-10 12:07



J'ai rencontré ce problème dans mon propre code. Il s'avère que je parcourais toutes les propriétés d'un objet événement dans le cadre d'un outil de débogage / inspection que j'utilisais. Dans ce cas particulier, j'utilisais $ .extend de jQuery pour cloner l'objet en vue d'une inspection ultérieure, mais je crois que l'une des techniques d'itération standard des différents toolkits aurait également déclenché l'avertissement.

Je le mentionne ici parce que mon idée initiale de rechercher simplement la base de code pour les instances de layerX ou de layerY n'a pas aidé - la propriété était référencée de manière générique, pas par nom.


3
2018-04-09 08:18