为了解决 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>
我正在使用隐藏的 iFrame,visible_iframe.html
因为我不想更改 visible_iframe.html 的 URL。
现在我希望当单击按钮时main_page.html
,我会收到警报消息。但这不会发生。在 Firefox 中它说 -访问属性“嗨”的权限被拒绝
奇怪的是当我把parent.Hi();
外部CheckForMessages()
功能,该Hi()
功能可以访问并显示警告框。
我应该怎么做才能解决这个问题?