You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

window.open打开谷歌标签页,beforeunload事件仅document.write后生效问题

问题原因与解决办法
  • 核心限制:浏览器同源策略
    你打开的谷歌页面和当前页面域名不同,浏览器的同源策略会禁止脚本对跨域窗口的事件、DOM进行操作,所以直接给myWindow绑定beforeunload事件根本不会生效。

  • 为什么document.write后能正常工作?
    调用myWindow.document.write("test")会清空新窗口里的谷歌页面,替换成和当前页面同源的内容。这时候新窗口的文档和当前页面属于同一源,同源策略的限制就解除了,事件监听自然能正常触发。

  • 替代方案
    如果需要监听这个跨域窗口的关闭状态,不能直接用beforeunload,可以试试这两种方法:

    1. 定时检查窗口的closed属性:
      var myWindow = window.open("https://www.google.com/", '_blank');
      const checkInterval = setInterval(() => {
        if (myWindow.closed) {
          alert("closing");
          console.log("closing");
          clearInterval(checkInterval);
        }
      }, 500);
      
    2. 要是新窗口的页面是你能控制的,还可以用postMessage做跨域通信,让新窗口在关闭前主动给父页面发消息。

内容的提问来源于stack exchange,提问作者junaidp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:20:31