Event.layerX ve event.layerY ile ilgili WebKit sorunları


507

Chrome'un son (kanarya) yapısında tonlarca kullanım dışı uyarı aldığımı fark ettim.

event.layerX ve event.layerY WebKit'te bozuldu ve kullanımdan kaldırıldı. Yakın gelecekte motordan çıkarılacaklar.

Görünüşe göre jQuery bir şeyleri mahvediyor.

Ben kullanıyorum: jquery-1.6.1.min.js.

En son jQuery sürümüne yükseltmeye yardımcı olur mu yoksa henüz düzeltilmemiş mi yoksa bir Chrome hatası mı yoksa başka bir şey mi?

PS

Size genel bir hata olduğunu düşündüğüm için kod gösteremem, ancak bir jQuery nesnesine erişmeye çalıştığımda veya jQuery layerX / layerY'ye erişmeye çalıştığında uyarıların atılmasından şüpheleniyorum (iyi olduğunu düşünüyorum hata: P).

jQuery muhtemelen bu özellikleri jQuery nesnesine kopyalar.

Yani...

Neler oluyor?

DÜZENLE

jQuery 1.7 çıktı ve bu sorunu giderir.

Daha fazla bilgiyi burada bulabilirsiniz .


1
Bunu bugün de fark ettim.
Dusda

5
jQuery 1.7 hala uyarı henüz sabit gibi görünmüyor .......
Krish

3
@ Stuart.Sklinar PHP'de de kod yazıp yazmadığınızı bilmiyorum, ama eğer yaparsanız @hataları bastırmak için de kullandığınızdan eminim .
PeeHaa

1
aralarında ara hata yoksa chrome yalnızca benzer hataları gruplandırır. Yani sorun gerçekten, hata ayıklama için konsolu kullanmayı daha hantal hale getiriyor. Tahriş edici, ama henüz herhangi bir jQuery işlevselliği aslında kırık olduğunu sanmıyorum
carpii

2
Gelecek nesiller için, WebKit'in ( hata 86264 ) kullanım dışı bırakma kararından layerXve layerYen azından daha dikkatli bir şekilde değerlendirene kadar geri çekildiğini belirtmek gerekir. Ayrıca son zamanlarda IE'nin eklediğini layerX ve layerYsürüm 9'a kadar sahip olmadığından bahsetmeye değer. Uyarılar WebKit'in son sürümlerinde kaldırılmıştır.
Nathan Wall

Yanıtlar:


463

Neler oluyor!?

"jQuery muhtemelen bu özellikleri jQuery nesnesine kopyalar." Kesinlikle haklısın, bu yüzden zaten bildiğin gibi geliyor! :)

Umarım jQuery, kodlara dokunmayı durdurmak için güncelleyecektir, ancak aynı zamanda WebKit'in bir olaydaki bir kullanımdan kaldırma uyarısını günlüğe kaydetmekten daha iyi bilmesi gerekirdi (en azından benim görüşüme göre). Bir mousemove işleyici ve konsol patlar. :)

İşte yeni bir jQuery bileti: http://bugs.jquery.com/ticket/10531

GÜNCELLEME: jQuery 1.7 sürümüne geçerseniz bu sorun giderildi.

JQuery'yi yükseltmek sorunu sizin için çözmezse, Jake'in cevabında belirttiği gibi kullanılmış uzantılar / eklentilerle ilgili bir şey olabileceğini lütfen unutmayın .


8
@ JQuery 1.7'de bilete göre kaldırılacak
sensör

7
Hala onları jQ 1.7'de görüyorum
Victor S

22
Ve hala jQ 1.7.1'de görüyorum. Yani sabit gibi görünmüyor.
Paparappa

3
1.7.1'e katılıyorum, uyarılar kayboldu! Teşekkürler.
Jk_

3
Tüm uzantılarımı devre dışı bıraktım ve hala bu uyarıları 1.7.2
basZero ile

74

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

Geçici düzeltme, jQuery aracılığıyla herhangi bir olay bağlaması yapmadan önce bu kodu çalıştırmaktır:

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

GÜNCELLEME

Etkinlik malzemelerini kaldırmanın en hızlı yolunun ne olduğunu öğrenmek için en son performans testlerine bakın .


İyi bağlantı! Perf testini değiştirdim. Normal ifade kullanımı bazı testleri yavaşlatıyor gibi görünüyordu? Bir şeyi kırmadıkça, tüm testlerde === veya! == kullanıldığında + en iyi seçeneği siler gibi görünüyor. jsperf.com/removing-event-props/3
Adam A

Ek kodu indirme ve çalıştırma ek yükü dışında mı? Hayır!
David Murdoch

Farklı çözümleri yalnızca bir kez çalıştırıldıklarında kıyaslamanın anlamı nedir? Bu durumda değer verilmesi gereken şey, sadelik ve performans üzerindeki daha az koddur. Her ikisini de istiyorsak, neden diziyi layerX / layerY olmayan değerlerle değiştirmiyoruz? (Yine de önemli değil) perf tezgah göz atın .
mekwall

28

Bunun en kısa çözümü bu tek astarlıdır:

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

1
@ Louis prototype.js hakkında bilgi sahibi değilim, bu yüzden çok fazla yardımcı olamam, ama sanırım düzeltme buna çok benzer olmalı. Bir soru
gönderin

21

Bu mesajların muazzam miktarı ( gmail kullanırken sadece 80000 tane aldım) gerçekten Chrome'da bir hata.

Soruna Chromium'da yıldız eklemeniz gerekir .


1
Bilginize, sorun neredeyse bir yıldır düzeltildi (yani uyarı WebKit'ten kaldırıldı). Bu sorunu hala görüyorsanız, tarayıcınızı yükseltmeyi düşünün.
törzsmókus

14

Chrome uzantılarından da kaynaklanabilir, bu nedenle jQuery güncellemesinin çalışmadığını kontrol edin.


5

İşte $ .event.props (bir dizi olabilir veya olmayabilir) orijinal örneğini değiştirmeden başka bir tek satır düzeltme, :-)

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

5

Herhangi bir olayı çağırdıktan sonra bunu kullandım:

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

Benim için çalıştı, kodumda bu yamayı yaptığımdan beri hiçbir uyarı mesajı yok.


4

Diğer yanıtlarda listelenen yapılandırma sorunlarının yanı sıra, bu hata kendi kodunuzdaki basit bir hata ile tetiklenebilir: bir jQuery ID seçicisinden '#' unutmak.

Kodum benziyordu

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

("veri kümesi" nin önündeki # işaretini kaçırır)

(Açıkçası) çalışmadığı gibi, Chrome'da bu hata mesajını tetikledi.


3

Kendi kodumda bu sorunla karşılaştım. Kullandığım bir hata ayıklama / denetim aracının parçası olarak bir olay nesnesindeki tüm özellikleri yineliyordum. Bu özel durumda daha sonra incelenmek üzere nesneyi klonlamak için jQuery's $ .extend kullanıyordum, ancak çeşitli araç setlerindeki standart yineleme tekniklerinden herhangi birinin de uyarıyı tetikleyeceğine inanıyorum.

Ben sadece burada katman katman veya layerY örnekleri için kod tabanı arama ilk düşüncem yardımcı olmadı - özellik adıyla değil, jenerik olarak başvuruluyordu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.