web-dev-qa-db-ja.com

パラメータがディスパッチされたイベントに渡されないのはなぜですか?

さて、私はこのようなイベントリスナーを設定しました...

window.addEventListener('message', parseMessage, false);

var parseMessage = function(rawMessage) {
    console.log(rawMessage.cmd);
};

そして、私はこのようなイベントをトリガーしています:

var event = new Event('message', {'cmd':"blerg!"});

window.dispatchEvent(event);

問題は、「blerg!」からログアウトすることを期待しているときに、console.log inparseメッセージが未定義でログアウトしていることです。

ここでイベントで何が間違っているのですか、「cmd」メッセージをイベントに渡す方法は?

19
MintDeparture
  1. カスタムイベントを作成するには、CustomEventの-​​ Event代わりにを使用します。

  2. 'details'オブジェクトでデータを指定します(コードを参照)。

  3. messagepostMessage API にも使用されるため、イベント名を変更しました。 Chromeで実行しても問題は発生しませんでしたが、使用しませんでした。

_var parseMessage = function(rawMessage) {
  console.log(rawMessage);
  console.log(rawMessage.detail.cmd);
};

// changed event name
window.addEventListener('myMessage', parseMessage, false);

// data should be in a 'details' object
var evt = new CustomEvent('myMessage', {
    detail: {
      'cmd' : "blerg!"
    }
});

window.dispatchEvent(evt);
_

IE> = 9の互換性( document.createEvent() および CustomEvent::initCustomEvent() を使用)の調整は次のとおりです。 )::

_var evt = document.createEvent("CustomEvent");
evt.initCustomEvent('myMessage', false, false, {
    'cmd': "blerg!"
});
_
48
ComFreek

IE9/10ポリフィルの場合、Mozillaが提供する次のコードを使用できます。
https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent

(function () {
  if (
      typeof window.CustomEvent === "function" ||
      // In Safari, typeof CustomEvent == 'object' but it otherwise works fine
      this.CustomEvent.toString().indexOf('CustomEventConstructor')>-1
  ) { return; }

  function CustomEvent ( event, params ) {
    params = params || { bubbles: false, cancelable: false, detail: undefined };
    var evt = document.createEvent( 'CustomEvent' );
    evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
    return evt;
   }

  CustomEvent.prototype = window.Event.prototype;

  window.CustomEvent = CustomEvent;
})();

ここでも説明されていますが、URLが間違っています: https://stackoverflow.com/a/22946340/1736012

26
olefrank