<!DOCTYPE html>
<html lang="pl" dir="ltr">
<head>
<meta charset="UTF-8">
<title>Ehhhhhh</title>
</head>
<body>
<script src="registerCustomEventDispatcher.js"></script>
<script>
registerCustomEventDispatcher( 'raiseEvent', 'mycustomevent' );
const worker = new Worker( 'worker.js' );
worker.raiseEvent( 'whatever' );
</script>
</body>
</html>
self.importScripts( 'registerCustomEvent.js' );
registerCustomEvent( 'mycustomevent' );
self.addEventListener( 'mycustomevent', console.log );
self.onmycustomevent = console.warn;
function registerCustomEvent( eventName ) {
self.addEventListener( 'message', ( { data: { type, name, detail } = {} } ) => {
if ( type !== 'event' && name !== eventName ) {
return;
}
const event = new CustomEvent( name, {
detail
} );
self.dispatchEvent( event );
} );
self.addEventListener( eventName, ( evt ) => {
if ( typeof self[ `on${ eventName }` ] === 'function' ) {
self[ `on${ eventName }` ].call( self, evt );
}
} );
}
function registerCustomEventDispatcher( dispatcherName, eventName ) {
Object.defineProperty( Worker.prototype, dispatcherName, {
value( detail ) {
const event = {
type: 'event',
name: eventName,
detail
};
this.postMessage( event );
}
} );
}