Есть ли способ создать TouchEvents или что-то, что работает как Firefox? - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь написать надстройку для браузера, которая может создавать искусственные TouchEvents. Пока что он работает в Chrome, но Firefox, похоже, не поддерживает TouchEvents, так как попытка создать его с new TouchEvent(...) приводит к:

ReferenceError: TouchEvent is not defined

Мне интересно, есть ли какой-нибудь способ, которым я мог бы либо самостоятельно реализовать TouchEvent в надстройке, либо иным образом отправить событие, которое имеет все необходимые свойства для использования, например TouchEvent.

Однако, если я создаю CustomEvent и назначаю ему дополнительные свойства, необходимые для того, чтобы он был TouchEvent (то есть touches, targetTouches и changedTouches), эти свойства не сохраняются время, когда веб-страница получает событие.

Есть ли способ добиться того, чего я добиваюсь, или мне не повезло, пытаясь заставить это работать в Firefox?

1 Ответ

0 голосов
/ 31 марта 2019

В случае, если у кого-то еще есть этот вопрос, вот решение, которое я нашел. Вы можете создать свой собственный класс, который расширяет UIEvent следующим образом:

class TouchEvent extends UIEvent {
    constructor(name, initDict) {
        super(name, initDict);
        this.touches = initDict.touches;
        this.targetTouches = initDict.targetTouches;
        this.changedTouches = initDict.changedTouches;
    }
}

Единственное предостережение в том, что эти события должны создаваться скриптом, работающим в том же домене, что и обработчик, который их получит, в противном случае вы получите ошибку Permission denied to access property. Моим решением для этого было использование скрипта содержимого моего расширения для добавления элемента script в тело текущего документа и установки его свойства textContent для моего кода javascript, который создает и отправляет события касания.

...