The timeStamp attribute must return the value it was initialized to. When an event is created the attribute must be initialized to the number of milliseconds that has passed since 00:00:00 UTC on 1 January 1970.
One could trap both new Event
and document.createEvent
to set the timeStamp accordingly but how do you intercept events created and dispatched by the browser?
One could add an event listener (capture phase) to the document
that listens on "every" event type and write the timeStamp as close to the dispatch time but that would be an ugly hack.
Event.timeStamp
?new Event
/ new CustomEvent
and document.createEvent
. document
and manually setting timeStamp
as early as possible ?Another option is to add the timestamp in the handler. Presumably, only code you write actually cares about the timestamp, and since you are in control of code you write, you can use your own "listen" helper function. Something like:
var myAddListener = function(name, fn, scope){
addEventListener(name, function(e){
if(!e.timeStamp) e.timeStamp = +new Date;
fn.apply(scope || null, arguments);
});
}
As long as your timestamp-dependant code is attached with this, you're fine. Note, I added a 'scope' argument while I was at it...it's a handy way of preserving 'this' when using listeners within class instances.