使用 javascript 创建的窗口在使用 window.close() 时不会在卸载之前触发

Window created using javascript do not fire onbeforeunload when using window.close()

本文关键字:卸载 close 创建 javascript 窗口 使用 window      更新时间:2023-09-26

我有这javascript code

var certWin = window.open('/admin/Includes/certCreator.php', '', 'width=200, height=100');
certWin.onbeforeunload = function() {
 var bodyHtml = $(certWin.document).find('body').html(),
     json = $.parseJSON(bodyHtml);
  if ( json['error'] ) {
    appMainStatusBar.setError(json['error']);
  }
}

如果发现任何错误,certCreator.php将返回一个JSON值,如果一切正常,将下载zip存档。

代码将打开一个新窗口,并将一直保留在那里,直到用户关闭它,当然我们不希望这样。如果我关闭窗口,appMainStatusBar对象将显示发现的错误...

但是当我添加这个时:

echo "<script type='text/javascript'>window.close();</script>"

certCreator.php文件。它将关闭窗口,但错误不会显示在appMainStatusBar对象上。就像onbeforeunload事件不触发一样。

所以我解决了。!

问题是我的目标是整个页面正文,所以每次触发事件时,它都会得到这样的内容:

{"error":"Options are not set"} <script type="text/javascript">window.close();</script>

它作为字符串存储在 bodyHtml var 中,然后我尝试将其解析为 JSON,当然不会解析。这不是要解析的有效字符串。

我把var bodyHtml改成了var resultsHtml = $(certWin.document).find('#results').html();

certCreator.php页面中,我更改为:

echo "<div id='results'>";
echo json_encode($returned);
echo "</div>";
echo "<script type='text/javascript'>window.close();</script>";

我希望这对其他人有所帮助。