Tsu*_*oku 77 javascript printing
当用户单击按钮时,我打开了一个标签.在onload
我有它打开打印对话框,但用户问我是否有可能在它发送到打印机打印之后,如果标签可以自行关闭.我不确定是否可以这样做.我尝试过使用setTimeout();
,但这不是一个定义的时间段,因为用户可能会分心,不得不重新打开选项卡.有没有办法实现这个目标?
ser*_*er2 107
如果您尝试在print()调用之后关闭窗口,它可能会立即关闭窗口并且print()将不起作用.这是你不应该做的:
window.open();
...
window.print();
window.close();
Run Code Online (Sandbox Code Playgroud)
这个解决方案适用于Firefox,因为在print()调用时,它会一直等到打印完成后再继续处理javascript并关闭()窗口.IE将失败,因为它调用close()函数而不等待print()调用完成.弹出窗口将在打印完成之前关闭.
解决这个问题的一种方法是使用"onafterprint"事件,但我不建议你这样做,因为这些事件只适用于IE.
关闭打印对话框(打印完成或取消)后,关闭弹出窗口的最佳方法.此时,弹出窗口将被聚焦,您可以使用"onfocus"事件关闭弹出窗口.
为此,只需在弹出窗口中插入此javascript嵌入代码:
<script type="text/javascript">
window.print();
window.onfocus=function(){ window.close();}
</script>
Run Code Online (Sandbox Code Playgroud)
希望这个肝脏;-)
更新:
对于新的Chrome浏览器,它可能仍然关闭太早在这里看到.我已实现此更改,它适用于所有当前浏览器:2/29/16
setTimeout(function () { window.print(); }, 500);
window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }
Run Code Online (Sandbox Code Playgroud)
noa*_*hen 79
这就是我想出来的,我不知道为什么在关闭之前有一点延迟.
window.print();
setTimeout(window.close, 0);
Run Code Online (Sandbox Code Playgroud)
Sam*_*Bié 23
当然,通过这样做很容易解决这个问题:
<script type="text/javascript">
window.onafterprint = window.close;
window.print();
</script>
Run Code Online (Sandbox Code Playgroud)
或者,如果您想做类似的事情,请转到上一页。
<script type="text/javascript">
window.print();
window.onafterprint = back;
function back() {
window.history.back();
}
</script>
Run Code Online (Sandbox Code Playgroud)
Yin*_*yle 14
只是:
window.print();
window.close();
Run Code Online (Sandbox Code Playgroud)
有用.
Hol*_*ger 12
我只想写我已经做过的事情以及对我有用的事情(因为我尝试过的其他事情都没有).
我遇到的问题是IE会在打印对话框启动之前关闭窗口.
经过大量的试验和错误测试,这就是我的工作:
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();
Run Code Online (Sandbox Code Playgroud)
这似乎适用于所有浏览器.
小智 10
这段代码非常适合我:
<body onload="window.print()" onfocus="window.close()">
Run Code Online (Sandbox Code Playgroud)
当页面打开时,它会自动打开打印对话框,打印或取消后会关闭窗口.
希望能帮助到你,
这是一款已在2016/05年度在Chrome,Firefox,Opera上测试过的跨浏览器解决方案.
请记住,Microsoft Edge有一个错误,如果打印被取消,它将无法关闭窗口.相关链接
var url = 'http://...';
var printWindow = window.open(url, '_blank');
printWindow.onload = function() {
var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);
if (isIE) {
printWindow.print();
setTimeout(function () { printWindow.close(); }, 100);
} else {
setTimeout(function () {
printWindow.print();
var ival = setInterval(function() {
printWindow.close();
clearInterval(ival);
}, 200);
}, 500);
}
}
Run Code Online (Sandbox Code Playgroud)
REF来源参考
<script type="text/javascript">
window.print();
window.onafterprint = window.close;
</script>
Run Code Online (Sandbox Code Playgroud)
使用Chrome我尝试了一段时间,以获得window.onfocus=function() { window.close(); }
和
<body ... onfocus="window.close()">
工作.我的结果:
我也尝试过<body onload="window.print(); window.close()" >
,在我甚至可以点击打印对话框中的任何内容之前窗口关闭.
我无法使用其中任何一个.所以我使用了一个小Jquery来监视文档状态,这段代码对我有用.
<script type="text/javascript">
var document_focus = false; // var we use to monitor document focused status.
// Now our event handlers.
$(document).focus(function() { document_focus = true; });
$(document).ready(function() { window.print(); });
setInterval(function() { if (document_focus === true) { window.close(); } }, 500);
</script>
Run Code Online (Sandbox Code Playgroud)
只需确保包含jquery,然后将其复制/粘贴到您正在打印的html中.如果用户已打印,保存为PDF或取消了打印作业,则窗口/选项卡将自动自毁.注意:我只在chrome中测试过这个.
正如Jypsy在评论中指出的那样,不需要文档焦点状态.您可以简单地使用noamtcohen的答案,我将我的代码更改为该代码并且它可以正常工作.
小智 7
只需通过 onafterprint 事件处理程序包装window.close,它对我有用
printWindow.print();
printWindow.onafterprint = () => printWindow.close();
Run Code Online (Sandbox Code Playgroud)
小智 5
这个对我有用:
<script>window.onload= function () { window.print();window.close(); } </script>
Run Code Online (Sandbox Code Playgroud)
以下解决方案适用于截至 2014 年 3 月 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);
};
Run Code Online (Sandbox Code Playgroud)
启动进程的按钮/链接只需调用此函数,如下所示:
openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');
Run Code Online (Sandbox Code Playgroud)
小智 5
以下为我工作:
function print_link(link) {
var mywindow = window.open(link, 'title', 'height=500,width=500');
mywindow.onload = function() { mywindow.print(); mywindow.close(); }
}
Run Code Online (Sandbox Code Playgroud)
这在 Chrome 59 中运行良好:
window.print();
window.onmousemove = function() {
window.close();
}
Run Code Online (Sandbox Code Playgroud)
IE 有(有?)onbeforeprint
和onafterprint
事件:你可以等待,但它只能在 IE 上运行(这可能会也可能不会)。
或者,您可以尝试等待焦点从打印对话框返回到窗口并将其关闭。Amazon Web Services 在其发票打印对话框中执行此操作:您点击打印按钮,它会打开打印友好的视图并立即打开打印机对话框。如果您点击打印或取消,打印对话框将关闭,然后打印友好的视图会立即关闭。
归档时间: |
|
查看次数: |
157742 次 |
最近记录: |