【问题标题】:Handling of child and grandchild windows in Javascript在 Javascript 中处理子窗口和孙窗口
【发布时间】:2008-10-27 15:12:08
【问题描述】:

我的网页上有一个主窗口 (#1),我从中打开一个新的浏览器窗口 (#2),我从中打开一个新窗口 (#3)。

现在,如果我的用户在 window#3 之前关闭了 window#2,我的问题是 window#3 不再可以在其 window.opener 中调用函数,因为它已经消失了。

我想做的是在 window#2 关闭时将 window#3.opener 设置为 window#1。

我尝试在窗口#2 中执行此操作(顺便说一下我使用 jquery):

var children = [];
$(window).unload( function( ) {
    $.each( children, function( p, win ) {
        if ( win ) {
            win.opener = window.opener;
            }
    } );
} );

当 window#3 被加载时,我将窗口添加到 window#2 中的子数组中。

但是当window#2在window#3之前关闭时,windows#3的window.opener并不指向window#1。

如何确保我的大子窗口 (window#3) 在 window#2 关闭后仍然可以调用主窗口 (window#1)?

【问题讨论】:

    标签: javascript jquery window


    【解决方案1】:

    在你输入的第三个窗口中:

    <script type="text/javascript">
      var grandMother = null;
      window.onload = function(){
        grandMother = window.opener.opener;
      }
    </script>
    

    这样你就有了外祖母窗口的句柄,然后你就可以直接用它做任何事情了:

    if(grandMother)
          grandMother.document.getElementById("myDiv").firstChild.nodeValue ="Greetings from your grandchild !-";
    

    【讨论】:

      【解决方案2】:

      您应该在第三个窗口打开时创建对主窗口的引用:

      parent = window.opener.opener
      

      这将在第二个窗口关闭后继续存在。

      【讨论】:

        【解决方案3】:

        window.opener 可能是只读的。我会设置您自己的属性以在加载孙子时引用祖父母。

        function onLoad() {
          window.grandparent = window.opener.opener;
        }
        

        【讨论】:

          【解决方案4】:

          这可能是切线,但为什么需要打开 3 个单独的窗口?你可以改用 jQuery 对话框吗?当应用在我身上打开窗口时,我感到非常沮丧。

          【讨论】:

            【解决方案5】:
            var main_window = get_main_window();
            function get_main_window(){
                var w = window;
                while(w.opener !== null){
                    w = w.opener;
                }
                return w;
            }
            

            【讨论】:

            • 请避免只使用代码回答并提供代码解释。
            猜你喜欢
            • 1970-01-01
            • 2015-12-02
            • 1970-01-01
            • 2016-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多