Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将事件从子窗口发送到其父窗口_Javascript_Tabs_Postmessage_Window.opener - Fatal编程技术网

Javascript 如何将事件从子窗口发送到其父窗口

Javascript 如何将事件从子窗口发送到其父窗口,javascript,tabs,postmessage,window.opener,Javascript,Tabs,Postmessage,Window.opener,我的主要目标是: 转到我的应用程序,在新选项卡中打开一个链接,在新选项卡中制作一些内容,并将事件发送到父主选项卡进行刷新。 我学到了两种技术,但它们并不能完全满足我的需要: postMessage-据我所知,它只在iframe上工作,不在选项卡上工作 window.opener-仅适用于只打开新窗口而不打开新选项卡的window.open(url) 如何使用选项卡将事件从子级传递到父级?我很乐意为父级和子级中的javascript代码提供一个具体示例。它应该适用于跨域(例如:www.mydoma

我的主要目标是:

转到我的应用程序,在新选项卡中打开一个链接,在新选项卡中制作一些内容,并将事件发送到父主选项卡进行刷新。

我学到了两种技术,但它们并不能完全满足我的需要:

  • postMessage-据我所知,它只在iframe上工作,不在选项卡上工作
  • window.opener-仅适用于只打开新窗口而不打开新选项卡的window.open(url)
  • 如何使用选项卡将事件从子级传递到父级?我很乐意为父级和子级中的javascript代码提供一个具体示例。它应该适用于跨域(例如:www.mydomain.com和bills.mydomain.com)


    有没有我缺少的jQuery解决方案?

    我为自己做的是,我实现了一些ajax,将window2中的更改提交到数据库中。我使用JSON将新数据从数据库拉回到window1中,以下内容在chrome、firefox和ie中都适用(没有测试更多浏览器)

    假设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时,会更容易一些。

    再次在parent.html和child.html中设置document.domain-property(您不需要parent.html和dispatcher.html中的iframe)

    在parent.html中还设置窗口的name属性,例如

    <script>
      window.name="parentTab";
    </script>
    
    …或者简单地使用“parentTarget”作为child.html中链接或表单的目标属性,方法是查看如何只谈论
    窗口。打开
    (您不想使用),而且很显然,没有简单的方法可以实现您想要的,您可能需要编写自己的框架来使用它。
    我不认为你能用它访问子域,当然也不能访问其他域


    使用
    sessionStorage
    传递特定于窗口的消息的实用想法。
    您可以在URL(GET)中传递内容,因此传递消息的一种方式可以是让父对象为自己生成唯一的id
    parentID
    ,为其子对象生成唯一的id
    childID
    (如果使用的是
    ,则在单击时将其与
    父ID一起插入URL,如果不介意
    ,则插入隐藏字段),然后使用
    sessionStorage
    使用诸如
    parentID.childID.timeStamp等键将消息保存到父级,在父级和子级中都有一个间隔,以查找
    sessionStorage
    键,从窗口的ID开始,然后是一个
    ,即父级查找
    parentID.
    )在匹配项上,将key&value复制到一个新的var,删除(这样就不会再找到它),然后根据需要进行解析


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

    我相信
    window.open
    应该返回一个新的window对象,如果您没有遇到同源策略的问题,您可以将父对象的侦听器附加到此对象上,或者设置一个interval,用于检查某些变量。@PaulS.,It window.open不会在新选项卡中打开。实际上,用户可以决定是在新选项卡中还是在新窗口中打开
    window.open()
    s。浏览器的选项中对此有设置。它在chrome中不起作用,但感谢您的支持
    <script>
    document.domain="mydomain.com";
    window.open('http://www.mydomain.com/dispatcher.html','hiddenframe');
    </script>
    
    <script>
    document.domain="mydomain.com";
    parent.fx('you just got some response');
    </script>
    
    <script>
      window.name="parentTab";
    </script>
    
    <script>
        document.domain="mydomain.com";
        window.open('http://www.mydomain.com/parent.html','parentTab');
    </script>