【问题标题】:Close child window, redirect parent window关闭子窗口,重定向父窗口
【发布时间】:2011-08-05 02:36:28
【问题描述】:

我有一个从父级打开子窗口的页面。

用户在子窗口中完成操作后,我需要通过单击子窗口中的按钮来关闭子窗口,并将其父窗口重定向到页面。

有什么想法吗?

【问题讨论】:

    标签: javascript redirect window


    【解决方案1】:

    来自孩子:

    opener.location.href = '/redirect';
    close();
    

    【讨论】:

    • 但是 IE 显示弹出窗口被阻止 :( 任何解决方案也适用于 IE?
    • @Binod -- IE 阻止弹出窗口与这个问题无关。如果您遇到问题,请提出一个新问题,这个问题已经快 3 年了。
    • 问题是同源策略。如果窗口不是同一来源,则 IE 将此重定向视为弹出窗口
    【解决方案2】:

    关键是使用window.opener访问父窗口:

    <script>
        window.opener.location = '/redirect.html';
        window.close();
    </script>
    

    【讨论】:

    • 你想翻转那些线,考虑一下:)
    • @cwolves:无论哪种方式都可以。即使在窗口对象关闭后,您仍然可以访问它的属性。
    • 不能保证。当然,在这种情况下它可能总是有效,但浏览器将开始关闭窗口并最终终止 JS 执行中间语句。如果您在window.close() 之后有长时间运行的代码,它有可能无法完成。也有可能某些浏览器会说“在window.close() 之后不允许运行代码”并立即将其杀死
    • @cwolves - 好点,我们不知道浏览器可能会做什么,所以按逻辑顺序执行会更安全。我在答案中翻转了两行。
    • 我真正指出这一点的唯一原因是我遇到了一个场景,我在window.onbeforeunload 中运行了很多逻辑并且浏览器杀死了它:(
    【解决方案3】:

    试试这个:

    var parent = window.opener;
    
    parent.location ='some url';
    
    window.close();
    

    这是一个小提琴的例子:http://jsfiddle.net/maniator/jGbZq/

    【讨论】:

      【解决方案4】:

      请在下面尝试:

      window.opener.location.reload();
      close();
      
      1. window.opener.location.reload();将重新加载父窗口。
      2. close() 将关闭子窗口

      对我来说很好用。

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        • 2013-02-14
        • 1970-01-01
        • 1970-01-01
        • 2011-06-30
        • 1970-01-01
        相关资源
        最近更新 更多