日期:2014-05-16  浏览次数:20281 次

js打印完毕后关闭窗口
   项目中有一个需求,在一个页面上点击一个按钮,弹出一个数据页面,并自动打印预览该数据页面,关闭打印预览窗口或打印后,自动关闭该数据页面。打印用的是浏览器的打印组件IEWebBrowser,IEWebBrowser的相关用法如下:
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=wb width=0></OBJECT>    
<input name=Button onClick=wb.ExecWB(1,1) type=button value=打开>   
<input name=Button onClick=wb.ExecWB(2,1) type=button value=关闭所有>   
<input name=Button onClick=wb.ExecWB(4,1) type=button value=另存为>    
<input name=Button onClick=wb.ExecWB(6,1) type=button value=打印>   
<input name=Button onClick=wb.ExecWB(6,6) type=button value=直接打印>   
<input name=Button onClick=wb.ExecWB(7,1) type=button value=打印预览>   
<input name=Button onClick=wb.ExecWB(8,1) type=button value=页面设置>   
<input name=Button onClick=wb.ExecWB(10,1) type=button value=属性>   
<input name=Button onClick=wb.ExecWB(17,1) type=button value=全选>   
<input name=Button onClick=wb.ExecWB(22,1) type=button value=刷新>   
<input name=Button onClick=wb.ExecWB(45,1) type=button value=关闭> 


项目的客户端环境有IE6和IE7两个版本,为了能实现上述功能,在数据页面加载完成后,执行WebBrowser的打印预览方法,弹出打印预览窗口。
  window.wb.execwb(7,1);// 打印预览页面

但关闭打印预览窗口后数据页面不能自动关闭,只能通过手动关闭,为了能够实现打印完自动关闭,在上述代码中执行完打印后再执行关闭方法
window.wb.execwb(7,1);// 打印预览页面
window.wb.execwb(45,1);// 关闭

经测试这样不行,在打开打印预览窗口就会报错,原因可能是因为window.wb.execwb(7,1);执行打印预览时,还没完全打开,就已经执行了window.wb.execwb(45,1);将数据页面关闭,导致打印预览需要数据无法取得出错。既然关的太快,就想到能不能通过延迟关闭页面的方法让打印预览有足够的时间完成预览。上面代码改为
window.wb.execwb(7,1);// 打印预览页面
setTimeout("function(){window.wb.execwb(45,1);// 关闭}",5000);//5秒后关闭页面


修改之后只能说很烂的完成了需要功能,项目历史原因也只能这样了。
测试时发现,在IE7下,只有当打印预览页面被关闭后,setTimeout的语句才起作用,而IE6下,window.wb.execwb(7,1);执行完,setTimeout就会被执行就起作用了,这样的话IE7下,就不用设置延迟时间,直接关闭就可以了。继续改:
1.增加一个判断浏览器版本的方法,网上找了找,采用下面方法,很好用
引用博客:http://www.cnblogs.com/leadzen/archive/2008/09/06/1285764.html
/**
* 获取IE版本
*/
function getIEVersion() {
    var Sys = {};
	var ua = navigator.userAgent.toLowerCase();
	var s;
	(s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
	(s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
	(s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
	(s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
	(s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
	
	return Sys.ie;
}

这个方法可以识别ie,firefox,chrome,opera,safari等浏览器及版本。如果要判断是什么浏览器,这样判断
1.是否是IE
    if(Sys.ie) {//是否是IE
    }
2.什么版本
    alert(Sys.ie);

因为我们的客户端只考虑IE6,7两个版本,再次修改后,上面的代码为
    var ieVersion = getIEVersion();
    window.wb.execwb(7,1);// 打印预览页面
    
    if (ieVersion =="6.0") {
       setTimeout("function(){window.wb.execwb(45,1);// 关闭}",5000);//5秒后关闭页面
    } else if(ieVersion =="7.0") {
       window.wb.execwb(45,1);// 关闭
    }