簡體   English   中英

如何檢測使用 window.open() 打開的窗口關閉事件

[英]How to detect window close event that was opened using window.open()

我試圖檢測我在 javascript 中使用window.open()打開的窗口關閉事件。 但由於某種原因,它似乎不起作用。

這是我的代碼:

<html>
<head>
   <script>
     var clicktest = function() {
        var newwindow = window.open("https://www.google.com",'myPopupwindow', "height=640,width=960,toolbar=no,menubar=no,scrollbars=no,location=no,status=no");
        newwindow.addEventListener("beforeunload", function (e) {
          console.log('hey');
        });
     }
   </script>
</head>
<body>
    <button onclick="clicktest()">hey</button>
</body>
</html>

我也嘗試使用

newwindow.onbeforeunload = function () {
    console.log('hey');
}

而不是window.addeventlistener() ,但兩者都不起作用,我確實嘗試使用window而不是newwindow ,但它仍然不起作用。

對於跨域文檔,唯一的解決方案是輪詢彈出窗口對象的.closed屬性。

但這是一件非常丑陋的事情,所以請稍等一下,看看您為什么需要這樣做。

為了限制丑陋,您可以使用電池友好的requestAnimationFrame 為輪詢供電:

const popup = window.open('https://google.com');
waitForClose(popup, e=>console.log('closed'));

function waitForClose(win, cb) {
  function poll() {
    if(win.closed) {
      cb();
    }
    else {
      requestAnimationFrame(poll);
    }
  }
  poll();
}

由於StackSnippet 的 iframe 不允許彈出窗口,因此很麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM