17
window.onmessage = ...
window.postMessage('1', '*');
window.postMessage('2', '*');

postMessage( http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#queue-a-task )はイベントの順序を保証しますか?

4

2 に答える 2

11

仕様の文言は、そのような保証をしないことを示唆しているように見えますが、わかりません (これは驚くべきことです)。受信側でMessageEventが に追加されると、その順序が維持されることは明らかですが、作成とディスパッチは元の呼び出しとは非同期であるため、理論的には次のような状況が発生する可能性があります。task queueMessageEventpostMessage

メインスレッド:

window.postMessage('1', '*'); --> thread spawned to create MessageEvent
window.postMessage('2', '*'); --> new thread spawned for another MessageEvent

スレッド管理システムがpostMessage、最初のスレッドがMessageEvent.それらのメッセージを逆の順序で。

これらの非同期実行のためのより多くのコンテキストを提供し、このケースを除外する仕様の他の場所があるかもしれませんが、私はそれを見つけることができませんでした.

于 2011-09-24T09:15:06.790 に答える
5

window.postMessage()呼び出されたときにのみメッセージイベントをトリガーします。従来のイベントのパブリッシュ/サブスクライブメカニズムと同様に、順序が実際に保証されるわけではありません。

于 2011-09-24T09:02:34.920 に答える