window.onmessage = ...
window.postMessage('1', '*');
window.postMessage('2', '*');
postMessage( http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#queue-a-task )はイベントの順序を保証しますか?
window.onmessage = ...
window.postMessage('1', '*');
window.postMessage('2', '*');
postMessage( http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#queue-a-task )はイベントの順序を保証しますか?
仕様の文言は、そのような保証をしないことを示唆しているように見えますが、わかりません (これは驚くべきことです)。受信側でMessageEventが に追加されると、その順序が維持されることは明らかですが、作成とディスパッチは元の呼び出しとは非同期であるため、理論的には次のような状況が発生する可能性があります。task queueMessageEventpostMessage
メインスレッド:
window.postMessage('1', '*'); --> thread spawned to create MessageEvent
window.postMessage('2', '*'); --> new thread spawned for another MessageEvent
スレッド管理システムがpostMessage、最初のスレッドがMessageEvent.それらのメッセージを逆の順序で。
これらの非同期実行のためのより多くのコンテキストを提供し、このケースを除外する仕様の他の場所があるかもしれませんが、私はそれを見つけることができませんでした.
window.postMessage()呼び出されたときにのみメッセージイベントをトリガーします。従来のイベントのパブリッシュ/サブスクライブメカニズムと同様に、順序が実際に保証されるわけではありません。