1

new Event не работает в IE11, и, к сожалению, также нет полина от MDN и этого вопроса: Internet Explorer 9, 10 & 11 Event constructor doesn't work, так как они полагаются на document.createEvent.Событие конструктора в рабочем на IE11?

Возможны ли какие-либо обходные пути для создания пользовательских событий в контексте рабочего?

+0

Зачем вам событие DOM в рабочий? – Bergi

+0

Я использую [Robust Websocket] (https://github.com/appuri/robust-websocket), и для этого требуется определить «CustomEvent». – Felipe

ответ

0

Использовать метод, который псевдонизирует реализацию существующей системы событий. Например:

sinon.Event = function Event(type, bubbles, cancelable, target) { 
     this.initEvent(type, bubbles, cancelable, target); 
    }; 

    sinon.Event.prototype = { 
     initEvent: function (type, bubbles, cancelable, target) { 
      this.type = type; 
      this.bubbles = bubbles; 
      this.cancelable = cancelable; 
      this.target = target; 
     }, 

     stopPropagation: function() {}, 

     preventDefault: function() { 
      this.defaultPrevented = true; 
     } 
    }; 

    sinon.CustomEvent = function CustomEvent(type, customData, target) { 
     this.initEvent(type, false, false, target); 
     this.detail = customData.detail || null; 
    }; 

    sinon.CustomEvent.prototype = new sinon.Event(); 

    sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; 

    sinon.EventTarget = { 
     addEventListener: function addEventListener(event, listener) { 
      this.eventListeners = this.eventListeners || {}; 
      this.eventListeners[event] = this.eventListeners[event] || []; 
      push.call(this.eventListeners[event], listener); 
     }, 

     removeEventListener: function removeEventListener(event, listener) { 
      var listeners = this.eventListeners && this.eventListeners[event] || []; 

      for (var i = 0, l = listeners.length; i < l; ++i) { 
       if (listeners[i] === listener) { 
        return listeners.splice(i, 1); 
       } 
      } 
     }, 

     dispatchEvent: function dispatchEvent(event) { 
      var type = event.type; 
      var listeners = this.eventListeners && this.eventListeners[type] || []; 

      for (var i = 0; i < listeners.length; i++) { 
       if (typeof listeners[i] === "function") { 
        listeners[i].call(this, event); 
       } else { 
        listeners[i].handleEvent(event); 
       } 
      } 

      return !!event.defaultPrevented; 
     } 
    }; 
} 


/** 
* Used to bind event listeners to the worker. Internally it uses the jQuery `.on` method. 
* @method on 
* @param {Mixed} args* Lookup the jQuery `.on` API for argument list. 
* @chainable 
*/ 

var worker = new WebWorker('./worker-script.js'); 
worker.on('my-custom-event', function() { 
console.log('custom event triggered!'); 
}); 

Список литературы