打印对话框关闭后自动关闭窗口
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印对话框关闭后自动关闭窗口相关的知识,希望对你有一定的参考价值。
当用户单击按钮时,我打开了一个标签。在onload
上,我打开了打印对话框,但是用户问我是否有可能在它发送到打印机后进行打印,如果标签可以自行关闭。我不确定是否可以这样做。我尝试过使用setTimeout();
,但由于用户可能会分心而不得不重新打开选项卡,因此它不是一段定义的时间。有没有办法实现这个目标?
如果您尝试在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浏览器,它可能仍然关闭太快see here。我已实现此更改,它适用于所有当前浏览器:2/29/16
setTimeout(function () { window.print(); }, 500);
window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }
从2014-03-10开始,以下解决方案适用于IE9,IE8,Chrome和FF新版本。场景是这样的:你在一个窗口(A)中,你点击一个按钮/链接来启动打印过程,然后打开一个新窗口(B),打开要打印的内容,立即显示打印对话框,您可以取消或打印,然后新窗口(B)自动关闭。
以下代码允许这样做。这个javascript代码将被放置在窗口A的html中(不适用于窗口B):
/**
* Opens a new window for the given URL, to print its contents. Then closes the window.
*/
function openPrintWindow(url, name, specs) {
var printWindow = window.open(url, name, specs);
var printAndClose = function() {
if (printWindow.document.readyState == 'complete') {
clearInterval(sched);
printWindow.print();
printWindow.close();
}
}
var sched = setInterval(printAndClose, 200);
};
启动进程的按钮/链接只需调用此函数,如:
openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');
这适用于Chrome 59:
window.print();
window.onmousemove = function() {
window.close();
}
当然,这可以通过以下方式轻松解决:
<script type="text/javascript">
window.print();
window.onafterprint = window.close;
</script>
这最适合我将HTML注入弹出窗口,如<body onload="window.print()"...
以上适用于IE,Chrome和FF(在Mac上),但在Windows上没有FF。
https://stackoverflow.com/a/11782214/1322092
var html = '<html><head><title></title>'+
'<link rel="stylesheet" href="css/mycss.css" type="text/css" />'+
'</head><body onload="window.focus(); window.print(); window.close()">'+
data+
'</body></html>';
这就是我做的......
启用窗口以根据查询参数打印和关闭自身。
需要jQuery。可以在_Layout或母版页中完成,以便与所有页面一起使用。
想法是在URL中传递一个参数,告诉页面打印和关闭,如果设置了参数,则jQuery“ready”事件打印窗口,然后当页面完全加载(打印后)“onload”调用它关闭窗口。所有这些看似额外的步骤都是在关闭之前等待窗口打印。
在调用printAndCloseOnLoad()的html body add和onload事件中。在这个例子中我们使用cshtm,你也可以使用javascript来获取param。
<body onload="sccPrintAndCloseOnLoad('@Request.QueryString["PrintAndClose"]');">
在javascript中添加功能。
function printAndCloseOnLoad(printAndClose) {
if (printAndClose) {
// close self without prompting
window.open('', '_self', ''); window.close();
}
}
和jQuery准备好的事件。
$(document).ready(function () {
if (window.location.search.indexOf("PrintAndClose=") > 0)
print();
});
现在打开任何URL时,只需附加查询字符串参数“PrintAndClose = true”,它就会打印并关闭。
这对我有用(2018/02)。我需要一个单独的请求,因为我的打印还没有在屏幕上。基于上面的一些优秀回答,我感谢大家,我注意到:
w.onload
不得在w.document.write(data)
之前设置。 这看起来很奇怪,因为你想要预先设置钩子。我的猜测:当没有内容打开窗口时,钩子已经被解雇了。由于它被解雇了,它不会再次开火。但是,当仍有一个新的document.write()
处理时,那么当处理完成时将调用钩子。w.document.close()
仍然是必需的。否则没有任何反应
我在Chrome 64.0,IE11(11.248),Edge 41.16299(edgeHTML 16.16299),FF 58.0.1中进行了测试。他们会抱怨弹出窗口,但它打印出来。
function on_request_print() {
$.get('/some/page.html')
.done(function(data) {
console.log('data ready ' + data.length);
var w = window.open();
w.document.write(data);
w.onload = function() {
console.log('on.load fired')
w.focus();
w.print();
w.close();
}
console.log('written data')
//this seems to be the thing doing the trick
w.document.close();
console.log('document closed')
})
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<a onclick="on_request_print();">Print rapportage</a>
const printHtml = async (html) => {
const printable = window.open('', '_blank', 'fullscreen=no');
printable.document.open();
printable.document.write(`<html><body onload="window.print()">${html}</body></html>`);
await printable.print();
printable.close();
};
这是我的ES2016解决方案。
<!doctype html>
<html>
<script>
window.print();
</script>
<?php
date_default_timezone_set('Asia/Kolkata');
include 'db.php';
$tot=0;
$id=$_GET['id'];
$sqlinv="SELECT * FROM `sellform` WHERE `id`='$id' ";
$resinv=mysqli_query($conn,$sqlinv);
$rowinv=mysqli_fetch_array($resinv);
?>
<table width="100%">
<tr>
<td style='text-align:center;font-sie:1px'>Veg/NonVeg</td>
</tr>
<tr>
<th style='text-align:center;font-sie:4px'><b>HARYALI<b></th>
</tr>
<tr>
<td style='text-align:center;font-sie:1px'>Ac/NonAC</td>
</tr>
<tr>
<td style='text-align:center;font-sie:1px'>B S Yedurappa Marg,Near Junne Belgaon Naka,P B Road,Belgaum - 590003</td>
</tr>
</table>
<br>
<table width="100%">
<tr>
<td style='text-align:center;font-sie:1'>-----------------------------------------------</td>
</tr>
</table>
<table width="100%" cellspacing='6' cellpadding='0'>
<tr>
<th style='text-align:center;font-sie:1px'>ITEM</th>
<th style='text-align:center;font-sie:1px'>QTY</th>
<th style='text-align:center;font-sie:1px'>RATE</th>
<th style='text-align:center;font-sie:1px'>PRICE</th>
<th style='text-align:center;font-sie:1px' >TOTAL</th>
</tr>
<?php
$sqlitems="SELECT * FROM `sellitems` WHERE `invoice`='$rowinv[0]'";
$resitems=mysqli_query($conn,$sqlitems);
while($rowitems=mysqli_fetch_array($resitems)){
$sqlitems1="SELECT iname FROM `itemmaster` where icode='$rowitems[2]'";
$resitems1=mysqli_query($conn,$sqlitems1);
$rowitems1=mysqli_fetch_array($resitems1);
echo "<tr>
<td style='text-align:center;font-sie:3px' >$rowitems1[0]</td>
<td style='text-align:center;font-sie:3px' >$rowitems[5]</td>
<td style='text-align:center;font-sie:3px' &g以上是关于打印对话框关闭后自动关闭窗口的主要内容,如果未能解决你的问题,请参考以下文章
什么可能导致 Tkinter/Python 中打开的文件对话框窗口在用户选择文件后关闭速度真的很慢?