Ошибка: не удалось выполнить dispatchEvent для EventTarget
Некоторое время назад у меня возникла проблема, когда прокрутка на сенсорных устройствах больше не работала, когда мое приложение ExtJS 5 было встроено в IFrame (см. Эту ветку).
Я решил это, переопределив некоторые вещи из среды Ext (см. Решение).
Одним из шагов решения было отправить touchmove
событие для самого документа (структура предотвращает обработку этого события по умолчанию):
// ...
touchmove: function(e) {
window.document.dispatchEvent(e.event);
}
// ...
Хотя это решение в основном работает, у него есть один недостаток: отправка события приводит к необработанному InvalidStateError
на каждом touchmove
событие, которое, очевидно, довольно часто:
Если я просто положу попробовать / поймать вокруг dispatchEvent
Заявление, прокрутка внутри IFrame на сенсорных устройствах больше не работает, как будто не вызывает его вообще.
Как я могу избавиться от ошибки, не прерывая прокрутку снова?
Testapp, где прокрутка работает, но возникает много необработанных ошибок, можно проверить здесь.
1 ответ
Я нашел удивительно простое решение: вы можете просто выйти из обработки события, вернув false
в обработчике:
touchmove: function(e) {
return false;
}
Это сделает прокрутку пузыря до браузера и будет обработана должным образом. Есть ли другие ограничения, на которые вы должны обратить внимание?
Если вы действительно хотите повторно отправить событие, это правильный способ сделать это:
window.document.dispatchEvent(
new old_event.constructor(old_event.type, old_event)
);
См. Также: Как клонировать или повторно отправить события DOM?