【原创】关于IE8上打印预览后window.close()无法关闭页面的问题

最近才发现这个问题。

在IE8上弹出的popup画面中,使用IE自身的打印预览,预览后点【×】关闭预览画面回到POPUP画面中点close按钮调用window.close()竟然无法关闭页面。而使用【ESC】按键关闭预览画面后,window.close()是正常的。

究其原因是因为IE内核中少写了一句话。

内核中检测了【ESC】按键按下的事件,并且调用了自身的Close()方法。这个方法是封装在IE内部的,外部无法调用。

但并未监听点【×】时的事件。

点【×】后给人感觉是关闭了画面,但其实预览画面属于一个modDialog。点【×】只是隐藏,没有真正的关闭,它会一直在等待打印完成。所以window.close()会不起作用。

后来在网上看到有不少人用WebBrowser的方法,但这种方法需要客户端浏览器降低安全级别,这种方法很危险,除非迫不得已。

后来研究了一种方法可以避免这种关闭不掉的bug,不需要降低安全级别,但是却不太友好。各位可以根据自己的项目需要,在两者之间选择一种解决方案。

我的解决办法是:

在popup的画面中加上如下JS

<script type="text/javascript">

var printFlag = false;

window.onblur = function(){

  if(printFlag){

    alert("Printing...");

    printFlag = false;

  }

}

window.onbeforeprint = function(){

  printFlag = true;

}

</script>

这样的话,会在弹出打印预览的Dialog之前弹出一个alert。之后预览画面会盖住alert信息。

如果用户点击【×】来关闭打印预览画面,那么关闭后alert框依然在。

此时用户点击alert的确定后,在点close按钮正常调用window.close()就会关闭画面。

注意:以上只是IE上的对应,如果多浏览器请hack。

总的来说,这个IEbug没有太完美的解决方法,如果大家谁有好的办法,欢迎交流一下。

转载于:https://www.cnblogs.com/victorysteven/archive/2012/04/29/2475835.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值