JavaScript のクロス ドメイン セキュリティの問題を解決するために、次のメソッドを実装しています。
ドメイン [ abc.com ]
ドメインabc.com
に というページがありますmain_page.html
。そのコードは次のとおりです -
<script>
function SendMsg(id)
{
frames["invisible_iframe"].location = "http://xyz.com/invisible_iframe.html#"+id;
}
</script>
<body>
<input type="button" id="Test" value="Call iFrame" onclick="SendMsg(this.id);">
<iframe src="ttp://xyz.com/visible_iframe.html" name="visible_iframe" height="250" width="500"></iframe>
<iframe name="invisible_iframe" height="0" width="0" style="display:none;"></iframe>
</body>
ドメイン [ xyz.com ]
ドメインxyz.com
に というページがありますvisible_iframe.html
。そのコードは次のとおりです -
<script>
function Hi()
{
alert("Hi there!");
}
</script>
<body>
<h1>Visible iFrame on xyz.com
<iframe name="d2_invisible_iframe" id="d2_invisible_iframe" class="iFrame" src="http://xyz.com/invisible_iframe.html" height="310" width="520"></iframe>
</body>
今、私は(同じドメイン上にある)Hi()
から関数にアクセスしたいinvisible_iframe.html
のコードinvisible_iframe.html
は次のとおりです
<script>
var sActionText = "";
function CheckForMessages()
{
if(location.hash != sActionText)
{
sActionText = location.hash;
var sAction = "";
var oSplitActionText = sActionText.split("#");
sAction = oSplitActionText[1];
if (sAction == "Test")
{
parent.Hi();
}
}
}
setInterval(CheckForMessages, 200);
</script>
<body>
<h1>Invisible iFrame on xyz.com</h1>
</body>
visible_iframe.html
visible_iframe.html の URL を変更したくないため、非表示の iFrame を使用しています。
ボタンをmain_page.html
クリックすると、アラートメッセージが表示されると思います。しかし、そうはなりません。Firefoxでは、プロパティ「こんにちは」へのアクセスが拒否されました
parent.Hi();
奇妙なことに、関数の外に置くCheckForMessages()
と、Hi()
関数にアクセスでき、警告ボックスが表示されます。
これを解決するにはどうすればよいですか?