JavaScript—如何在页面尚未关闭之前检测窗口是否已关闭';我还没有满载

JavaScript—如何在页面尚未关闭之前检测窗口是否已关闭';我还没有满载,javascript,asp.net,javascript-events,page-lifecycle,Javascript,Asp.net,Javascript Events,Page Lifecycle,我试图找到一种方法来检测窗口是否已关闭,但事件: 仅当页面已完全加载时才调用 基本上,我试图模拟一个模式弹出窗口的行为,也就是说,当弹出窗口打开时,主页(打开者)通过覆盖一个透明的div被冻结,当弹出窗口关闭时,在onunload事件中,该div被隐藏。 我的问题是,如果加载弹出窗口的内容需要一些时间,并且用户在完成加载之前关闭窗口,那么onunload事件永远不会被触发,因此透明div仍然可见 你知道我有什么方法可以检测到网页是否正在关闭,即使它还没有完成加载 编辑 这是我的代码: 在父

我试图找到一种方法来检测窗口是否已关闭,但事件:

仅当页面已完全加载时才调用

基本上,我试图模拟一个模式弹出窗口的行为,也就是说,当弹出窗口打开时,主页(打开者)通过覆盖一个透明的div被冻结,当弹出窗口关闭时,在onunload事件中,该div被隐藏。

我的问题是,如果加载弹出窗口的内容需要一些时间,并且用户在完成加载之前关闭窗口,那么onunload事件永远不会被触发,因此透明div仍然可见

你知道我有什么方法可以检测到网页是否正在关闭,即使它还没有完成加载

编辑 这是我的代码:

在父窗口(打开器)中

单击链接时

 popUpObj = window.open(url, 'ModalPopUp', opts);
 popUpObj.focus();
 LoadModalDiv();
显示和隐藏div的函数

这些函数在父窗口中实现

function LoadModalDiv() {
    var bcgDiv = document.getElementById("divBackground");
    bcgDiv.style.display = "block";
}
function HideModalDiv() {
    var bcgDiv = document.getElementById("divBackground");
    bcgDiv.style.display = "none";
}
在子窗口(弹出窗口)


函数OnClose(){
如果(window.opener!=null&&!window.opener.closed){
window.opener.HideModalDiv();
}
}
函数OnLoad(){
if(window.opener!=null&&!window.opener.closed){
window.opener.LoadModalDiv();
}
}              
window.onload=onload;
window.onunload=OnClose;

您可以在头部的元标记之后添加一些JavaScript,甚至在样式之前。在那里完成连接此事件所需的最小工作量(如果可能的话,不使用jQuery使其立即执行),并且不要等待加载事件。让它在被解析时执行。你使用的是“实际的”新窗口吗?或者这是主窗口中的覆盖图?如果它是主窗口中的一个覆盖,那么你可以控制弹出窗口关闭的所有方式,这样你就可以得到通知。最简单的解决方案是只使用实际的模式(Bootstrap、jQuery、roll your own等等)。内容可以是AJAX格式的,或者如果您真的想要一个外部页面,可以使用iframe。这比试图破解窗口事件要好上千万倍。附议@krillgar。将JavaScript放在几乎所有内容的末尾是一个好习惯,但对于类似的内容,您希望在实际操作之前触发
onbeforeunload
事件处理程序。@krillgar虽然这可以减少问题,但它仍然不是一个解决方案。您可以在头部的元标记之后添加一些JavaScript,甚至在时尚之前。在那里完成连接此事件所需的最小工作量(如果可能的话,不使用jQuery使其立即执行),并且不要等待加载事件。让它在被解析时执行。你使用的是“实际的”新窗口吗?或者这是主窗口中的覆盖图?如果它是主窗口中的一个覆盖,那么你可以控制弹出窗口关闭的所有方式,这样你就可以得到通知。最简单的解决方案是只使用实际的模式(Bootstrap、jQuery、roll your own等等)。内容可以是AJAX格式的,或者如果您真的想要一个外部页面,可以使用iframe。这比试图破解窗口事件要好上千万倍。附议@krillgar。将JavaScript放在几乎所有内容的末尾是一个好习惯,但对于类似的内容,您希望在实际执行任何其他操作之前触发
onbeforeunload
事件处理程序。@krillgar虽然这可以减少问题,但它仍然不是一个解决方案。
 <script type="text/javascript">
        function OnClose() {
            if (window.opener != null && !window.opener.closed) {                
                window.opener.HideModalDiv();
            }
        }
        function OnLoad() {
            if (window.opener != null && !window.opener.closed) {
                window.opener.LoadModalDiv();
            }
        }              
        window.onload = OnLoad;
        window.onunload = OnClose;

    </script>