javascript - त्रुटि:'EventTarget' पर 'डिस्पैचइवेंट' निष्पादित करने में विफल




iframe extjs touch extjs5 (2)

कुछ समय पहले मुझे एक ऐसी समस्या का अनुभव हुआ जहां स्पर्श डिवाइस पर स्क्रॉल करना अब और काम नहीं कर रहा था जब मेरे एक्स्टजेएस 5 ऐप IFrame ( यह धागा देखें) में एम्बेड किया गया था।

मैंने इसे एक्सट फ्रेमवर्क से कुछ सामान ओवरराइड करके हल किया है ( समाधान देखें)।

समाधान का एक चरण दस्तावेज के लिए एक touchmove इवेंट को प्रेषित touchmove था (इस घटना का ढांचा इस डिफॉल्ट हैंडलिंग को रोकता है):

// ...
touchmove: function(e) {
    window.document.dispatchEvent(e.event);
}
// ...

भले ही यह समाधान मूल रूप से काम करता है, इसमें एक दोष है: घटना को InvalidStateError से प्रत्येक touchmove इवेंट पर एक अनियंत्रित InvalidStateError फेंकता है जो स्पष्ट रूप से अक्सर है:

अगर मैं बस dispatchEvent स्टेटमेंट के आसपास एक प्रयास / कैश डालता हूं, तो टच डिवाइस पर आइफ्रेम के अंदर स्क्रॉल करना अब और काम नहीं करता है जैसे कि उसे बिल्कुल कॉल नहीं करना है

मैं स्क्रॉलिंग को तोड़ने के बिना कैसे त्रुटि से छुटकारा पा सकता हूं?

टेपटॉप जहां स्क्रोलिंग काम करता है लेकिन कई अनियंत्रित त्रुटियां यहां परीक्षण की जा सकती हैं


Answers

मुझे एक आश्चर्यजनक रूप से सरल समाधान मिला: आप केवल हेन्डलर में false लौटने से ईवेंट हैंडलिंग से बाहर जा सकते हैं:

touchmove: function(e) {
    return false;
}

यह ब्राउजर पर स्क्रॉलिंग बबल बना देगा और ठीक ढंग से संभाला जाएगा। क्या कोई अन्य बाधाएं हैं जिन पर आपको ध्यान देना है?

अगर आप वास्तव में घटना को फिर से प्रेषित करना चाहते हैं, तो ऐसा करने का सही तरीका है:

window.document.dispatchEvent(
    new old_event.constructor(old_event.type, old_event)
);

यह भी देखें: कैसे क्लोन या फिर से प्रेषण DOM घटनाओं?


हां, आप इसे प्राप्त करने के लिए target="_parent" का उपयोग कर सकते हैं।

"target =" _ parent "मूलभूत फ्रेम में लिंक किए गए दस्तावेज़ को खोलता है।"

उदाहरण:

<a target="_parent" href="http://example.org">Click me!</a>

संपादित करें:

अगर यह काम नहीं कर रहा है, तो आप _top कोशिश कर सकते हैं:

<a target="_top" href="http://example.org">Click me!</a>

या base target :

<base target="_parent" />

या जावास्क्रिप्ट में window.top.location :

window.top.location = "http://example.com";






javascript iframe extjs touch extjs5