当使用Window.close()时,使用javascript创建的窗口在卸载之前不启动
我有一段当使用Window.close()时,使用javascript创建的窗口在卸载之前不启动,javascript,Javascript,我有一段javascript代码: 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 ( j
javascript代码
:
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“window.close();”
转到certCreator.php
文件。它将关闭窗口,但错误不会显示在appMainStatusBar
对象上。这就像在卸载之前发生的事件“请勿触发”。所以我解决了它
问题是我将整个页面作为目标,所以每次触发事件时,都会得到如下结果:
{"error":"Options are not set"} <script type="text/javascript">window.close();</script>
我希望这对其他人有帮助。比赛条件?如果您改为
setTimeout(window.close,3000)
怎么办?这将为附加onbeforeunload
事件提供足够的时间。我无法在window.close上执行超时,因为无法知道脚本是否正在运行。。。该脚本创建成员证书,创建所有需要的证书可能需要很长或很短的时间。@Jack Well我添加了超时,但它仍然不起作用。
echo "<div id='results'>";
echo json_encode($returned);
echo "</div>";
echo "<script type='text/javascript'>window.close();</script>";