window.onbeforeunload不在Chrome中触发,但在Firefox中工作

vit*_*rio 5 javascript jquery google-chrome

我有一个主窗口和一个弹出窗口.弹出窗口在主窗口中创建.

就像parent.php是主窗口.在这个页面上,我有一个JavaScript函数来重新加载页面,如下所示:

function popUpClosed() {
  window.location.reload();
}
Run Code Online (Sandbox Code Playgroud)

我们可以从parent.php打开弹出窗口.现在我想在关闭/导航弹出窗口时从弹出窗口执行popUpClosed()函数parent.php.

我尝试了以下方法来实现相同的目标.

方法1

window.onunload = window.onbeforeunload = function() {
  if(window.opener && !window.opener.closed) {
    window.opener.popUpClosed();
  }
};
Run Code Online (Sandbox Code Playgroud)

方法2

window.onbeforeunload = Call;

function Call() {
  if(window.opener && !window.opener.closed) {
    window.opener.popUpClosed();
  }
}
Run Code Online (Sandbox Code Playgroud)

方法3

window.onpagehide = function() {
  window.opener.popUpClosed();
}
Run Code Online (Sandbox Code Playgroud)

除谷歌浏览器外,所有浏览器都能正常运行.Chrome没有触发任何功能.

但是,这发生在过去2-3天.之前所有的事情都在Chrome中运行良好.(可能是由于最新的Chrome更新引起的)

任何建议将不胜感激.

Sun*_*mar -3

您可以尝试以下代码:

我创建了打开 POP 窗口的常用函数:

function PopupCenter(url, title, w, h) {
        var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
        var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;

        width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
        height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;

        var left = ((width / 2) - (w / 2)) + dualScreenLeft;
        var top = ((height / 2) - (h / 2)) + dualScreenTop;

        child = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);

        if (child.focus) {
            child.focus();
        }
    }
Run Code Online (Sandbox Code Playgroud)

为了检查子窗口是否关闭,我正在使用该setInterval函数并检查间隔,如下所示:

function checkChild() {
    if (child != undefined && child.closed) {
            //alert("Child window closed");
            clearInterval(timer);
            location.reload();
        }
    }
Run Code Online (Sandbox Code Playgroud)

演示版

  • 这怎么能得到赏金...用 setInterval 替换事件是一个非常糟糕的主意 (5认同)