是否可以从子(Javascript)关闭父窗口?

时间:2011-11-14 12:42:57

标签: javascript jquery html dom

我正在尝试使用javascript从子窗口关闭父窗口,但它无法正常工作。

如果您有任何代码,请与我分享。

我的父母html:

<script>
    var winr;
    var selfw;
    function openAn(){
        selfw=self.window;
        winr=window.open("shell.htm","");

    }

    function justClose(){
        //setTimeout("closeAfterMin()",2000);

        winr.close();
    }

    function closeAfterMin(){
        alert("sd");
        selfw.close();
    }

</script>
<body onload='openAn()' >
    <h1>New Web Project Page</h1>
</body>

我的孩子html:

 <script>
        function closeAll(){
               window.parent.close();


        }

    </script>
    <body>
        <div onclick="closeAll();" onunload="window.opener.close();">
            Close Parent and self
        </div>
    </body>

请帮帮我..

7 个答案:

答案 0 :(得分:7)

来自window.close() MDN

  

仅允许为打开的窗口调用此方法   通过使用window.open方法的脚本。如果窗口没有打开   通过脚本,JavaScript控制台中出现以下错误:   脚本可能无法关闭脚本未打开的窗口。

您可以从父级关闭子窗口,但不能反过来。

答案 1 :(得分:1)

function closeW() {
   window.open('javascript:window.open("", "_self", "");
   window.close();', '_self');
}

使用子页面的超时调用上面的函数。它适用于IE,有时也适用于Chrome。

setTimeout(closeW,500);

答案 2 :(得分:0)

function closeAll()
{
    window.opener.justClose();
}

答案 3 :(得分:0)

如果您的意思是父框架中的子框架,请使用

window.parent.close();

如果你的意思是一个打开的窗口(使用window.open()),那么试试这个

window.opener.close();

答案 4 :(得分:0)

有一个可行的解决方案(至少在Chrome中):

以下是父页面的代码:

<html>
<head>
<script type="text/javascript">

function openChild() {
    var w = window.open("parent_close_child.html", "child");
}

</script>
</head>
<body>

<input type="button" value="Open" onclick="openChild()" />

</body>
</html>

以下是子页面的代码:

<html>
<head>
<script type="text/javascript">

function closeParent() {
    var w = window.opener;
    window.opener = self;
    w.close();
}

</script>
</head>
<body>

<input type="button" value="Close parent" onclick="closeParent()" />

</body>
</html>

试试吧!

答案 5 :(得分:0)

更新了答案 让孩子关闭父母是错误的耦合。我的原始答案才有效,因为我的父窗口本身是通过祖父母窗口的javascript打开的!

为避免不必要的耦合,执行此操作的正确方法是让父窗口使用setInterval对触发关闭的事件轮询子项。在此示例中,该事件是子窗口关闭。我实际上用这个用ajax刷新页面的一部分而不是关闭窗口,但原理是一样的......

        $('#open_child').click( 
        function(e) {
          e.preventDefault(); 
          docs_popup = window.open($('#open_child').attr('href'),'upload_doc');

          var timer = setInterval(function() {   
              if(docs_popup.closed) {  
                  window.close();
              }  
          }, 1000); 

          return false; 
        } );

原始答案 实际上有一个相当简单的工作。

创建一个除了关闭之外什么也不做的页面,例如close.html

<!DOCTYPE html>
<html>
    <head>
        <script>window.close();</script>
    </head>
    <body>
        <p>This window should close automatically.</p>
    </body>
</html>

然后在子窗口中,将开启器重定向到自行关闭的页面:

window.opener.location.href='close.html';

答案 6 :(得分:0)

您可能想尝试这个

window.opener.close()