当用户单击按钮时,我打开了一个选项卡。在onload
我把它调出打印对话框,但用户问我它是否是可能的,它发送到打印机后打印,如果标签可以关闭本身。我不确定这是否可以完成。我曾尝试使用setTimeout();
,但它不是一个定义的时间段,因为用户可能会分心并不得不重新打开选项卡。有什么办法可以做到这一点吗?
打印对话框关闭后自动关闭窗口
IT技术
javascript
printing
2021-02-10 22:21:35
6个回答
如果您尝试在 print() 调用后立即关闭窗口,它可能会立即关闭窗口并且 print() 将不起作用。这是你不应该做的:
window.open();
...
window.print();
window.close();
此解决方案适用于 Firefox,因为在调用 print() 时,它会等待打印完成,然后继续处理 javascript 并关闭窗口。IE 将因此失败,因为它调用 close() 函数而不等待 print() 调用完成。弹出窗口将在打印完成前关闭。
解决它的一种方法是使用“onafterprint”事件,但我不向您推荐它,因为这些事件仅适用于 IE。
最好的方法是在打印对话框关闭(打印完成或取消)后关闭弹出窗口。此时,弹出窗口将被聚焦,您可以使用“onfocus”事件关闭弹出窗口。
为此,只需在弹出窗口中插入此 javascript 嵌入代码:
<script type="text/javascript">
window.print();
window.onfocus=function(){ window.close();}
</script>
希望这有助于 ;-)
更新:
对于新的 chrome 浏览器,它可能仍然过早关闭,请参见此处。我已经实现了这个更改,它适用于所有当前的浏览器:2/29/16
setTimeout(function () { window.print(); }, 500);
window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }
这是我想出来的,不知道为什么关闭前会有一点延迟。
window.print();
setTimeout(window.close, 0);
当然,通过这样做很容易解决这个问题:
<script type="text/javascript">
window.onafterprint = window.close;
window.print();
</script>
或者,如果您想做类似的事情,请转到上一页。
<script type="text/javascript">
window.print();
window.onafterprint = back;
function back() {
window.history.back();
}
</script>
只是:
window.print();
window.close();
有用。
我只想写下我所做的和对我有用的(因为我尝试过的其他方法都没有奏效)。
我遇到的问题是 IE 会在打印对话框出现之前关闭窗口。
经过大量的反复试验 og 测试后,这就是我的工作:
var w = window.open();
w.document.write($('#data').html()); //only part of the page to print, using jquery
w.document.close(); //this seems to be the thing doing the trick
w.focus();
w.print();
w.close();
这似乎适用于所有浏览器。