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

Is it possible to close parent window from child (Javascript)?

本文关键字:窗口 Javascript 是否      更新时间:2023-09-26

我正试图使用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>

请帮帮我。

从window.close((MDN:

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

您可以从父窗口关闭子窗口,但不能从另一个角度关闭。

你可能想试试这个

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

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

setTimeout(closeW,500(;

更新的答案让孩子靠近父母是不好的结合。我最初的答案之所以有效,是因为我的父窗口本身是由祖父母窗口通过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';

如果您指的是父帧中的子帧,则使用

window.parent.close();

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

window.opener.close();

有一个有效的解决方案(至少在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>

试试看!

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