WebKit-Probleme mit event.layerX und event.layerY

507

Mir ist gerade aufgefallen, dass ich in der neuesten (kanarischen) Version von Chrome unzählige veraltete Warnungen erhalte.

event.layerX und event.layerY sind in WebKit fehlerhaft und veraltet. Sie werden in naher Zukunft vom Motor entfernt.

Sieht so aus, als würde jQuery alles vermasseln.

Ich benutze : jquery-1.6.1.min.js.

Würde es helfen, auf die neueste jQuery-Version zu aktualisieren, oder ist es noch nicht behoben oder handelt es sich um einen Chrome-Fehler oder um etwas anderes?

PS

Ich kann Ihnen keinen Code anzeigen, da ich denke, dass es sich um einen allgemeinen Fehler handelt, aber ich vermute, dass die Warnungen ausgegeben werden, wenn ich versuche, auf ein jQuery-Objekt zuzugreifen, oder wenn jQuery versucht, auf layerX / layerY zuzugreifen (nun, ich bin mir ziemlich sicher, dass dies unter Berücksichtigung des Falles der Fall ist Fehler: P).

jQuery kopiert diese Eigenschaften wahrscheinlich in das jQuery-Objekt.

Damit...

Was ist los?

BEARBEITEN

jQuery 1.7 ist nicht verfügbar und behebt dieses Problem.

Lesen Sie hier mehr in ihrem Blog .

PeeHaa
quelle
1
Ich habe das auch heute bemerkt.
Dusda
5
jQuery 1.7 ist immer noch werfen die Warnung scheint noch nicht behoben .......
Krish
3
@ Stuart.Sklinar Ich weiß nicht, ob Sie auch in PHP codieren, aber wenn Sie dies tun, bin ich mir ziemlich sicher, dass Sie auch @Fehler unterdrücken.
PeeHaa
1
Chrome gruppiert ähnliche Fehler nur, wenn dazwischen keine Zwischenfehler aufgetreten sind. Das Problem ist also wirklich, dass es umständlicher wird, die Konsole zum Debuggen zu verwenden. Es ist irritierend, aber ich glaube noch nicht, dass eine jQuery-Funktionalität tatsächlich kaputt ist
carpii
2
Für die Nachwelt ist es erwähnenswert, dass sich WebKit ( Fehler 86264 ) von ihrer Entscheidung zur Ablehnung zurückgezogen hat, layerXund layerYzumindest bis sie dies genauer prüfen. Es ist auch erwähnenswert, dass der IE kürzlich hinzugefügt wurde layerX und layerYnachdem er erst in Version 9 verfügbar war. Ich vermute, dass diese Eigenschaften nicht verschwinden - zumindest bis es einen geeigneten W3C-Ersatz gibt, der nicht bald verfügbar sein wird. Die Warnungen sind in neueren Versionen von WebKit verschwunden.
Nathan Wall

Antworten:

463

Was ist los!?

"jQuery kopiert diese Eigenschaften wahrscheinlich in das jQuery-Objekt." Du bist genau richtig, also klingt es so, als ob du es bereits weißt! :) :)

Hoffentlich aktualisiert jQuery seinen Code, um ihn nicht mehr zu berühren, aber gleichzeitig hätte WebKit es besser wissen müssen, als eine Verfallswarnung für ein Ereignis zu protokollieren (zumindest meiner Meinung nach). Ein Mausbewegungshandler und Ihre Konsole explodieren. :) :)

Hier ist ein aktuelles jQuery-Ticket: http://bugs.jquery.com/ticket/10531

UPDATE: Dies ist jetzt behoben, wenn Sie auf jQuery 1.7 aktualisieren.

Bitte beachten Sie, dass ein Upgrade von jQuery das Problem möglicherweise nicht mit den verwendeten Erweiterungen / Plugins zu tun hat, wie Jake in seiner Antwort angegeben hat .

Adam A.
quelle
8
@Neal in jQuery 1.7 wird es laut Ticket
Sensor
7
Ich sehe sie immer noch in jQ 1.7
Victor S
22
Und ich sehe sie immer noch in jQ 1.7.1. Scheint also nicht behoben zu sein.
Paparappa
3
Ich stimme 1.7.1 zu, Warnungen sind verschwunden! Vielen Dank.
Jk_
3
Ich habe alle meine Erweiterungen deaktiviert und erhalte immer noch diese Warnungen mit 1.7.2
basZero
74

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

Die vorübergehende Korrektur besteht darin, diesen Code auszuführen, bevor Sie eine Ereignisbindung über jQuery durchführen:

(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;
}());

AKTUALISIEREN

Sehen Sie sich die neuesten Leistungstests an, um herauszufinden, wie Sie die Event-Requisiten am schnellsten entfernen können.

David Murdoch
quelle
Guter Link! Ich habe den Perf-Test geändert. Die Verwendung eines regulären Ausdrucks schien einige der Tests zu verlangsamen? Wenn ich nicht etwas kaputt gemacht habe, scheint die Verwendung von === oder! == bei allen Tests dazu zu führen, dass + die beste Option gelöscht wird. jsperf.com/removing-event-props/3
Adam A
Neben dem Aufwand für das Herunterladen und Ausführen des zusätzlichen Codes? Nee.
David Murdoch
Was bringt es, die verschiedenen Lösungen zu vergleichen, wenn sie nur einmal ausgeführt werden? Einfachheit und weniger Code über Leistung sollten in diesem Fall bewertet werden. Wenn wir beides wollen, warum nicht einfach das Array durch die Werte ersetzen, denen LayerX / LayerY fehlt? Schauen Sie sich die Perf-Bank an (was sowieso keine Rolle spielt).
Mekwall
28

Die kürzeste Lösung hierfür ist dieser Einzeiler:

$.event.props = $.event.props.join('|').replace('layerX|layerY|', '').split('|');
Mekwall
quelle
1
@ Louis Ich bin nicht mit prototype.js vertraut, daher kann ich keine große Hilfe sein, aber ich denke, das Update sollte diesem sehr ähnlich sein.
Stellen Sie
21

Die enorme Menge dieser Nachrichten (ich habe gerade 80000 davon bei der Verwendung von Google Mail erhalten) ist in der Tat ein Fehler in Chrome.

Sie sollten das Problem auf Chromium markieren .

törzsmókus
quelle
1
Zu Ihrer Information, das Problem wurde fast ein Jahr lang behoben (dh die Warnung wurde aus WebKit entfernt). Wenn dieses Problem weiterhin auftritt, sollten Sie Ihren Browser aktualisieren.
Törzsmókus
14

Dies kann auch durch Chrome-Erweiterungen verursacht werden. Überprüfen Sie diese, ob das jQuery-Update nicht funktioniert.

Jake
quelle
5

Hier ist eine weitere einzeilige Korrektur, ohne die ursprüngliche Instanz von $ .event.props (die ein Array sein kann oder nicht) zu ersetzen, nur für den Fall :-)

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

Ich habe dies verwendet, nachdem ich ein Ereignis aufgerufen habe:

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

Das hat bei mir funktioniert, ich habe keine Warnmeldungen, seit ich diesen Patch auf meinem Code gemacht habe.

jca258
quelle
4

Neben den in den anderen Antworten aufgeführten Konfigurationsproblemen kann dieser Fehler durch einen einfachen Fehler in Ihrem eigenen Code ausgelöst werden: Vergessen des '#' in einem jQuery ID-Selektor.

Ich hatte Code, der aussah wie

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

(das # vor dem "Datenotset" fehlt)

Diese Fehlermeldung wurde nicht nur (offensichtlich) nicht ausgeführt, sondern auch in Chrome ausgelöst.

xgretsch
quelle
3

Ich bin in meinem eigenen Code auf dieses Problem gestoßen. Es stellte sich heraus, dass ich im Rahmen eines von mir verwendeten Debugging- / Inspektionstools alle Eigenschaften eines Ereignisobjekts durchlaufen habe. In diesem speziellen Fall habe ich jQuerys $ .extend verwendet, um das Objekt für eine spätere Überprüfung zu klonen, aber ich glaube, dass jede der Standard-Iterationstechniken in den verschiedenen Toolkits die Warnung ebenfalls ausgelöst hätte.

Ich erwähne es hier, weil mein anfänglicher Gedanke, die Codebasis einfach nach Instanzen von LayerX oder LayerY zu durchsuchen, nicht geholfen hat - die Eigenschaft wurde generisch und nicht namentlich referenziert.

Kris Giesing
quelle