使用 javascript 创建的窗口在使用 window.close() 时不会在卸载之前触发
Window created using javascript do not fire onbeforeunload when using window.close()
我有这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>";
我希望这对其他人有所帮助。
相关文章:
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 动态加载和卸载js文件
- 在页面卸载时写入HTML5 FileSystem API存储
- 如何禁用窗口.当计时器超时时,打开卸载警报
- 从jqueryajax加载php页面卸载当前页面
- 火灾在卸载前确认警报仅适用于外部站点
- 在火狐浏览器卸载之前
- 在窗口中单击按钮完成之前,光标不会停止.请继续卸载
- 卸载未触发组件WillUnmount的子级
- ReacJS与猴面包树,如何在卸载组件后释放光标
- 避免重新评估和动态卸载用“require”调用的对象
- 我可以't在Chrome中触发卸载事件
- Modernizr IE跳过“;卸载”;
- 在AngularJS中手动加载和卸载外部javascript
- 有没有一种方法可以为卸载的lazylod图像隐藏alt标签
- 从模态卸载数据
- 页面卸载期间的JavaScript事件循环
- 使用 javascript 创建的窗口在使用 window.close() 时不会在卸载之前触发
- 是否可以在卸载事件之前触发引导模式
- 在IE 11中使用window.close()关闭弹出窗口后,卸载事件未触发