以下翻译内容适用于Chrome、Firefox和IE(未测试其他浏览器)。
假设有3个文档:
1. (
www.mydomain.com/parent.html)包含链接的“主”文档的页面。
2. (
bills.mydomain.com/child.html)将由链接打开的页面。
3. (
www.mydomain.com/dispatcher.html)稍后会解释。
首先,将这3个文档的域属性设置为mydomain.com。
<script>
document.domain="mydomain.com"
</script>
在parent.html中创建一个名称为"hiddenframe"的隐藏iframe。同时创建一些函数,以便稍后可以接收响应。
现在,parent.html应该看起来像这样:
<script>
document.domain="mydomain.com";
function fx(msg)
{
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属性(您不需要在parent.html中使用iframe和dispatcher.html)
在parent.html中还设置窗口的name属性,例如
<script>
window.name="parentTab";
</script>
在child.html中,您现在可以访问
parentTab
窗口(选项卡)。
<script>
document.domain="mydomain.com";
window.open('http://www.mydomain.com/parent.html','parentTab');
</script>
...或者在child.html中的链接或表单中使用"parentTarget"作为目标属性。
window.open
应该返回一个新的 Window 对象,如果你没有遇到同源策略的问题,你可以将一个监听器从父级附加到这个对象上,或者设置一个时间间隔来检查某个变量。 - Paul S.window.open()
是在新标签页还是新窗口中打开。浏览器选项中有一个设置来控制这个功能。 - Teemu