I'm trying to write a browser add-on that can create artificial TouchEvents
. So far I have it working in Chrome but Firefox does not seem to support TouchEvents
, as trying to create one with new TouchEvent(...)
produces:
ReferenceError: TouchEvent is not defined
I'm wondering if there's some way I can either implement TouchEvent
myself in the add-on or otherwise dispatch an event that has all the necessary properties to be usable like a TouchEvent
.
However if I create a CustomEvent
and assign it the extra properties necessary for it to effectively be a TouchEvent
(i.e. touches
, targetTouches
, and changedTouches
) those properties don't persist by the time the webpage receives the event.
Is there any way to accomplish what I'm after, or am I out of luck trying to get this to work in Firefox?
In case anyone else has this question, here is the solution I found. You can create your own class that extends UIEvent like so:
class TouchEvent extends UIEvent {
constructor(name, initDict) {
super(name, initDict);
this.touches = initDict.touches;
this.targetTouches = initDict.targetTouches;
this.changedTouches = initDict.changedTouches;
}
}
The one caveat is that these events have to be constructed by a script running in the same domain as the handler that will receive them, otherwise you'll get a Permission denied to access property
error. My solution for that was to use my extension's content script to add a script element in the current document's body and set its textContent property to my javascript code that creates and dispatches the touch events.