HTML5-WEST.jp 飲み会 UST というのがあるそうで、「参戦希望者募集」とお誘いを受けたのですが、「参戦」というからには何かしら戦の準備を整えねばなるまいと、以前から考えていたことを夜なべして実装しました。
いわゆる HTML5 の文書間通信、window.postMessage()
を IE 6/7 でどう再現するかという話で、about:blank
を指す隠しフレームを二つ用い、window.name
を介することで双方向の通信を実現しています。
どうも IE での about:blank
は、その空白ページを読み込ませた文書の生成元を継承するらしく、たとえば http://example.org/
から location.href = 'about:blank';
を実行すれば http://example.org
を生成元とする about:blank
になります (少なくともそのように見えます)。これを利用し、一つのフレームに二つの文書から交互に about:blank
を読み込ませあうことで、そのフレームの window.name
を両文書で共有できるという仕組みです。
about:blank
を読み込ませるのに location.reload()
を使えば履歴に余分な項目を残すこともありませんし、フラグメント識別子を使った場合と違ってデータ量にもだいぶ余裕が出ます。
セコメントをする