Event.layerX और event.layerY के साथ WebKit मुद्दे


507

मैंने अभी देखा कि मुझे क्रोम के नवीनतम (कैनरी) निर्माण में कई टन की चेतावनी मिली है।

event.layerX और event.layerY को तोड़ दिया गया और WebKit में हटा दिया गया। निकट भविष्य में उन्हें इंजन से हटा दिया जाएगा।

लगता है jQuery बात खराब कर रहा है।

मैं उपयोग कर रहा हूं jquery-1.6.1.min.js:।

क्या यह नवीनतम jQuery संस्करण में अपग्रेड करने में मदद करेगा या अभी तक इसे ठीक नहीं किया गया है या यह क्रोम बग है या यह कुछ और है।

पुनश्च

मैं आपको कोड नहीं दिखा सकता क्योंकि मुझे लगता है कि यह एक सामान्य त्रुटि है, लेकिन मुझे संदेह है कि जब मुझे jQuery ऑब्जेक्ट तक पहुँचने की कोशिश की जाती है या जब jQuery लेयरएक्स / लेयर तक पहुँचने की कोशिश करता है तो अच्छी तरह से फेंक दिया जाता है (अच्छी तरह से मुझे यकीन है कि इस मामले पर विचार कर रहा है) त्रुटि: पी)।

jQuery शायद उन गुणों को jQuery ऑब्जेक्ट में कॉपी करता है।

इसलिए...

क्या चल रहा है?

संपादित करें

jQuery 1.7 बाहर है और इस समस्या को हल करता है।

और अधिक पढ़ें यहाँ अपने ब्लॉग पर,


1
बस आज इस पर ध्यान दिया।
दुस्दा

5
jQuery 1.7 अभी भी चेतावनी फेंक रहा है लगता है अभी तक तय नहीं किया गया है .......
कृष्ण

3
@ Stuart.Sklinar मुझे नहीं पता कि क्या आप PHP में भी कोड करते हैं, लेकिन अगर आप करते हैं तो मुझे यकीन है कि आप @त्रुटियों को दबाने के लिए भी उपयोग करेंगे।
पेशाब

1
क्रोम केवल समान त्रुटियों को समूहित करता है यदि बीच में कोई अंतरिम त्रुटियां नहीं हुई हैं। तो मुद्दा वास्तव में है, कि यह डिबगिंग के लिए कंसोल का उपयोग करने के लिए अधिक बोझिल बना देता है। इसकी एक अड़चन है, लेकिन अभी तक मुझे नहीं लगता कि कोई jQuery कार्यक्षमता वास्तव में टूटी है
carpii

2
यह ध्यान देने योग्य है, पोस्टीरिटी के लिए, कि WebKit ( बग 86264 ) ने अपने निर्णय से पदावनत करने के लिए बंद कर दिया है layerXऔर layerYकम से कम तब तक जब तक वे इसे अधिक सावधानी से विचार नहीं करते। यह भी ध्यान देने योग्य है कि IE ने हाल ही में जोड़ाlayerX और layerYसंस्करण 9 तक नहीं होने के बाद। मेरा अनुमान है कि ये गुण दूर नहीं हो रहे हैं - कम से कम जब तक एक उपयुक्त डब्ल्यू 3 सी प्रतिस्थापन नहीं है, जो जल्द ही नहीं होगा। चेतावनियाँ WebKit के हाल के संस्करणों में गई हैं।
नाथन वाल

जवाबों:


463

क्या चल रहा है!?

"jQuery शायद उन गुणों को jQuery ऑब्जेक्ट में कॉपी करता है।" आप बिल्कुल सही हैं, तो ऐसा लगता है कि आप पहले से ही जानते हैं! :)

उम्मीद है कि jQuery को छूने से रोकने के लिए उनके कोड को अपडेट किया जाएगा, लेकिन एक ही समय में WebKit को किसी घटना पर एक अवतरण चेतावनी लॉग करने से बेहतर पता होना चाहिए (कम से कम मेरी राय में)। एक मूसमोव हैंडलर और आपका कंसोल फट गया। :)

यहाँ एक हालिया jQuery टिकट है: http://bugs.jquery.com/ticket/10531

अद्यतन: यह अब ठीक हो गया है अगर आप 1.7 jQuery के लिए उन्नयन।

कृपया ध्यान दें कि यदि jQuery को अपग्रेड करना आपके लिए समस्या को ठीक नहीं करता है, तो इसका उपयोग किए गए एक्सटेंशन / प्लगइन्स के साथ कुछ हो सकता है जैसा कि जेक ने अपने उत्तर में बताया है ।


8
@ JQuery 1.7 में यह टिकट के अनुसार हटा दिया जाएगा
सेंसर

7
मैं उन्हें अभी भी jq 1.7 में देख रहा हूं
विक्टर एस

22
और मैं अभी भी उन्हें jq 1.7.1 में देखता हूं। इसलिए तय नहीं किया जा रहा है।
पापरप्पा

3
मैं 1.7.1 से सहमत हूं, चेतावनी गायब हो गई! धन्यवाद।
Jk_

3
मैंने अपने सभी एक्सटेंशनों को अक्षम कर दिया है और मुझे अभी भी 1.7.2 के साथ ये चेतावनी मिलती है
बेसेरो

74

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

अस्थायी फिक्स इस कोड को चलाने के लिए है, इससे पहले कि आप 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;
}());

अपडेट करें

देखें इवेंट प्रॉप्स को निकालने का सबसे तेज़ तरीका क्या है, नवीनतम प्रदर्शन परीक्षण


अच्छा लिंक! मैंने परफेक्ट टेस्ट को संशोधित किया। रेगेक्स का उपयोग कुछ परीक्षणों को धीमा करने के लिए लग रहा था? जब तक मैंने कुछ परीक्षण नहीं तोड़ दिया, सभी परीक्षणों पर === या! == का उपयोग करते हुए लगता है कि सबसे अच्छा विकल्प + हटा दें। jsperf.com/removing-event-props/3
एडम

अतिरिक्त कोड को डाउनलोड करने और चलाने के ओवरहेड के अलावा? नहीं।
डेविड मर्डोक

जब वे केवल एक बार चलते हैं, तो अलग-अलग समाधानों को मानने का क्या मतलब है? सादगी और प्रदर्शन पर कम कोड इस मामले में मूल्यवान होना चाहिए। यदि हम दोनों चाहते हैं, तो बस उन मूल्यों के साथ सरणी को क्यों न बदलें, जिनमें लेयरएक्स / लेयर की कमी है? पूर्ण बेंच देखें (जो वैसे भी मायने नहीं रखता)।
मेकवॉल

28

इसका सबसे छोटा समाधान यह वन-लाइनर है:

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

1
@ लेकिन मैं प्रोटोटाइप से परिचित नहीं हूं। जेएस तो मैं बहुत मदद नहीं कर सकता, लेकिन मुझे लगता है कि फिक्स इसके लिए बहुत समान होना चाहिए। एक प्रश्न पोस्ट करें और उम्मीद करें कि कोई व्यक्ति जानता है :)
mekwall

21

इन संदेशों की विशाल राशि (मुझे जीमेल का उपयोग करते समय उनमें से सिर्फ 80000 मिले) वास्तव में क्रोम में एक बग है।

आपको क्रोमियम पर समस्या को देखना चाहिए ।


1
FYI करें, इस मुद्दे को लगभग एक वर्ष के लिए तय किया गया है (यानी चेतावनी को WebKit से हटा दिया गया है)। यदि आप अभी भी इस समस्या को देखते हैं, तो अपने ब्राउज़र को अपग्रेड करने पर विचार करें।
törzsmókus

14

यह क्रोम एक्सटेंशन के कारण भी हो सकता है, इसलिए यदि jQuery का अपडेट काम नहीं करता है, तो उन्हें जांचें।


5

यहाँ $ .event.props (जो एक सरणी हो सकता है या नहीं भी हो सकता है) के मूल उदाहरण को प्रतिस्थापित किए बिना एक और एक लाइन फिक्स है, बस मामले में :-)

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

5

मैंने किसी भी ईवेंट को कॉल करने के बाद इसका उपयोग किया है:

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

मेरे लिए काम किया, मेरे पास कोई चेतावनी संदेश नहीं है क्योंकि मैंने अपने कोड पर यह पैच बनाया है।


4

साथ ही साथ अन्य उत्तरों में सूचीबद्ध कॉन्फ़िगरेशन समस्याएँ, इस त्रुटि को आपके स्वयं के कोड में एक साधारण त्रुटि से ट्रिगर किया जा सकता है: jQuery आईडी चयनकर्ता से '#' को भूल जाना।

मुझे कोड की तरह लग रहा था

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

("डेटेनॉटसेट" के सामने # गायब है)

साथ ही (स्पष्ट रूप से) काम करने में विफल होने पर, उसने क्रोम में इस त्रुटि संदेश को ट्रिगर किया।


3

मैं अपने कोड में इस मुद्दे पर भाग गया। यह पता चलता है कि मैं एक डिबगिंग / निरीक्षण उपकरण के भाग के रूप में एक इवेंट ऑब्जेक्ट पर सभी गुणों पर पुनरावृत्ति कर रहा था जो मैं उपयोग कर रहा था। इस विशेष उदाहरण में, मैं बाद के निरीक्षण के लिए ऑब्जेक्ट को क्लोन करने के लिए jQuery के $ .extend का उपयोग कर रहा था, लेकिन मेरा मानना ​​है कि विभिन्न टूलकिट में किसी भी मानक पुनरावृत्ति तकनीक ने चेतावनी को ट्रिगर किया होगा।

मैंने इसका उल्लेख यहां किया है क्योंकि लेयरएक्स या लेयर के उदाहरणों के लिए कोड आधार खोजने की मेरी प्रारंभिक सोच ने मदद नहीं की - संपत्ति को उदारतापूर्वक संदर्भित किया जा रहा था, नाम से नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.