我怎么能发送从子窗口的事件它的父窗口(How can I send an event from ch

2019-08-02 14:50发布

我的主要目标是:

将我的应用程序,在新标签页中打开链接存在,使新标签的东西,并发送一个事件到父主选项卡刷新。

我已经学会2项技术,没有做什么,我需要:

  1. postMessage的 - 工程,据我只知道在IFRAME而不是标签
  2. window.opener - 只有window.open(URL)的作品打开只新窗口,而不是新的选项卡。

如何传递从孩子使用标签父的事件? 我很高兴在父母和子女的JavaScript代码的具体例子。 应该跨域合作(例如:www.mydomain.com和bills.mydomain.com)。

有AA jQuery的解决方案,我很想念?

Answer 1:

下面对我的作品在Chrome,火狐,IE浏览器(没有测试更多的浏览器)

假设3个文件

  1. (www.mydomain.com/parent.html),其中包含了“main'文档与链接的页面
  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)//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的属性(你不需要在parent.html iframe和dispatcher.html)

在parent.html还设置窗口,如名称,属性

<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链接或形式的目标特性



Answer 2:

我做了我自己什么,我Implemeted一个一些Ajax提交从窗口2变为数据库。 我Implemeted一个JSON从数据库中获取新的数据返回到窗口1



Answer 3:

通过参观了解的问题类似只谈window.open (你不想使用)和AFAIK有没有简单的方法来获得在同一域中的所有窗口 ,你想要的东西,你可能需要编写自己的框架做到这一点使用window.sessionStorage
我不认为你可以访问它的子域,绝对不是到其他领域,虽然。


切合实际的想法,使用通过特定的窗口消息sessionStorage ..
你可以通过事物的URL(GET),这样的方式来传递消息可能使父母产生一个唯一的ID为自己parentID ,因为它的唯一ID的孩子childID (这与沿插入URL parentID上点击如果您使用的是<a> ,或隐藏字段,如果你不介意<form method="GET">然后用sessionStorage消息保存到使用键,如父parentID.childID.timeStamp ,有一个间隔两个父母和孩子,以查找sessionStorage 启动与窗口的ID,然后一个. (即父寻找parentID.在比赛的关键和值复制到一个新的变种,删除(所以它不会再次找到),然后解析为所需。

我知道这是一个有点罗嗦,但我认为这是有可能更容易为比编写工作示例代码中的概念来解释。



文章来源: How can I send an event from child window to its parent window