以下は、chrome、firefox、つまり(これ以上のブラウザーはテストしていません)で機能します
3つのドキュメントを想定
- ( www.mydomain.com/parent.html )「メイン」ドキュメントとリンクを含むページ
- ( bills.mydomain.com/child.html ) リンク先で開くページ
- ( www.mydomain.com/dispatcher.html )後述
最初に、3 つのドキュメントすべてのドメイン プロパティを mydomain.com に設定します。
<script>
document.domain="mydomain.com";
</script>
parent.html で、「hiddenframe」などの name-property を持つ非表示の iframe を作成します。また、後で応答を受け取る可能性のある関数を作成します。
parent.html は次のようになります。
<script>
document.domain="mydomain.com";
function fx(msg)//receives the response
{
alert(msg)
}
</script>
<iframe name="hiddenframe" style="display:none"></iframe>
<a href="http://bills.mydomain.com/child.html" target="_blank">click</a>
child.html では、parent.html 内の非表示の iframe にドキュメントをロードできるようになりました。
<script>
document.domain="mydomain.com";
window.open('http://www.mydomain.com/dispatcher.html','hiddenframe');
</script>
(ここでの使用に直面しても混乱しないでくださいwindow.open()
。新しいウィンドウは開きません。ページはparent.htmlのiframeにロードされます)
dispatcher.html では、parent.html 内の関数を呼び出すことができます
<script>
document.domain="mydomain.com";
parent.fx('you just got some response');
</script>
parent.html をリロードするだけでよい場合は、少し簡単です。
再度、parent.html と child.html に document.domain-property を設定します (parent.html と dispatcher.html に iframe は必要ありません)。
parent.html では、ウィンドウの name-property も設定します。
<script>
window.name="parentTab";
</script>
child.html でparentTab
-window(tab)にアクセスできるようになりました
<script>
document.domain="mydomain.com";
window.open('http://www.mydomain.com/parent.html','parentTab');
</script>
...または単に「parentTarget」を、child.html のリンクまたはフォームのターゲット プロパティとして使用します。