Ошибка: не удалось выполнить 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?

Другие вопросы по тегам