目次 |
---|
・クロスドキュメントメッセージングとは |
クロスドキュメントメッセージングは、異なるドメイン(及びオリジン)のフレーム間でメッセージ通信を行うメカニズムを提供します。
<iframe>要素などを使うと、一つのページの中に複数のページを内包することができます。
しかし、フレーム内のページは表示は出来るものの、親ページ(フレーム)からJavascriptなどで操作することはできません。
URLにパラメータをつけて、フレーム内のページを変更することは可能ですが、ページそのものが更新するために(時間、メモリ消費などの)コストがかかります。
Javascriptなどスクリプトからサイト(フレーム)間の操作を行うことをクロスサイトスクリプティングといいます。
このクロスサイトスクリプティング、セキュリティとプライバシー保護の観点から必要不可欠な制限です。
しかし、この制限により、異なるドメイン間での通信手段がなく、WEBアプリケーションの障害になる場合がありました。
また同じドメインでも、httpプロトコルとSSLプロトコルなど、プロトコルが変わっても操作及び通信できなくなります。
このような「スキーマ(httpなど):ドメイン名:ポート番号」の組み合わせを「オリジン(orgin)」といいます。
先のセキュリティとプライバシー保護の観点から制限は、異ドメイン間だけでなく、異オリジン間にも適用されます。
そのため、httpプロトコルとSSLプロトコルで通信ができません。
html5では、クロスドキュメントメッセージング(Cross-document messaging)と呼ばれる仕様を導入することで、この問題の解決方法としています。
但し、異なるオリジン間のDOMを直接操作することはできません。
それそれのオリジンから、メッセージを送り、それを受信します。
オリジン間でメールのやりとりのようなことをすることで、異なるオリジン間をつなぎます。
クロスドキュメントメッセージングは、2011年8月現在以下のブラウザで対応しています。
FireFox 3.5~、Safari 4~、Opera 10.6~、Google Chrome 3~、IE 8~
次のサンプルスクリプトはクロスドキュメントメッセージングを使った例です。
※本来は異なるオリジン間で行いますが、本ページでは便宜上同一オリジン間にて通信を行います。
クロスドキュメントメッセージングは、ページ内にWindowProxyオブジェクトを用意します。
WindowProxyオブジェクトは、フレーム側のWindowsオブジェクトのことです。
内包するフレーム(<iframe>要素など)のcontentWindowプロパティで得ることができます。
フレーム(オリジン)間をつなぐのは「postMessage」メソッドです。
この「postMessage」メソッドで異なるオリジン間でデータのやりとりをします。
クロスドキュメントメッセージングのイベントは「onmessage」です。