2012-01-13 83 views
2

我有下面的代码块,用当前的窗口内容打开一个新的浏览器窗口,除了在打印的分解布局中。然后它将新页面发送到打印机,最后关闭页面。我遇到的问题是,在打印机选项卡获取所有数据之前,新窗口似乎已关闭。也许是来自print()的回调,然后在完成时调用close()?我将如何去实现这个功能? 在此先感谢。内容前往打印机的窗口关闭(JavaScript)

打印列表

<script type="text/javascript"> 
    function generate_url() 
    { 
     //var go_href = 'http:<?php echo BASE_URL ?>/admin/reservations/print_list'; 
     myWin = window.open('http:<?php echo BASE_URL ?>/admin/reservations/print_list'); 
     myWin.focus(); 
     myWin.print(); 
     myWin.close() 
     return false; 
    } 

</script> 

回答

2

我不认为有打印任何回调函数。我建议你可以延迟窗关闭,这可能会以某种方式帮助:

 

myWin.focus(); 
myWin.print(); 
setTimeout(function(){ 
    myWin.close(); 
}, 6000); 
 

希望它有助于在某种程度上

+0

感谢您的苏德赫。这是我目前实施的,但我担心它不会一直工作。如果有人正在使用旧系统或列表非常大,那么窗口内容可能需要很长时间才能进入打印屏幕,并且可能过早关闭窗口......谢谢 – 2012-01-13 12:18:32

0

完全删除了JavaScript和新的一页。使用打印介质样式表去除(display: none)您不想打印的内容。

+0

感谢Quentin - 你能详细说明一下你的探索吗 – 2012-01-15 10:41:12

+0

如果你不知道:浏览器有能力使用不同的CSS进行打印,即当你调用'window.print()'或甚至通过菜单打印时,它们应用不同的样式表:http://www.alistapart.com/articles/goingtoprint/。因此,您在同一个HTML页面中拥有“易于打印的版本”和屏幕截图。这可能会或可能不适合您的情况。 – user123444555621 2012-01-15 12:52:49

0

不要打开一个新的窗口,但内容加载到一个隐藏的iframe

var ifr = document.createElement('iframe'); 
ifr.style.display = 'none'; 
ifr.src = '/admin/reservations/print_list'; 
ifr.onload = function() { 
     ifr.contentWindow.print(); 
} 
document.body.appendChild(ifr); 

您可以在以后重新使用此iframe进一步来印刷,可笑长超时后删除它,或者只是离开它在页面上。

+0

感谢Pumbaa80,这似乎是完美的工作,我很高兴离开页面上的iframe。 – 2012-01-15 10:40:05

0

感谢Pumbaa80,但IE6/7是eval!

这样,我在ie/7中测试,它的工作原理!

在父页面

var printIframe = document.getElementById('printIframe'); 
printIframe.src = 'print.php'; 

<iframe id="printIframe" style="width: 0; height: 0;" /> 

打印页:

<body onload="this.focus(); this.print();">