1

new EventはIE11では機能しません。残念なことに、MDNとこの質問のpolyfillは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!'); 
}); 

参照

関連する問題