Saya memiliki tab yang terbuka saat pengguna mengklik tombol. Pada onload
Saya memilikinya memunculkan dialog cetak, tetapi pengguna bertanya kepada saya apakah mungkin setelah mengirim ke printer untuk dicetak, jika tab dapat menutup sendiri. Saya tidak yakin apakah ini bisa dilakukan. Saya telah mencoba menggunakan setTimeout();
, tetapi ini bukan periode waktu yang ditentukan karena pengguna mungkin terganggu dan harus membuka kembali tab. Apakah ada cara untuk melakukannya?
javascript
printing
Tsundoku
sumber
sumber
Jawaban:
jika Anda mencoba menutup jendela tepat setelah panggilan print (), ini mungkin akan segera menutup jendela dan print () tidak akan berfungsi. Inilah yang tidak boleh Anda lakukan :
window.open(); ... window.print(); window.close();
Solusi ini akan berfungsi di Firefox, karena pada panggilan print (), ia menunggu hingga pencetakan selesai dan kemudian melanjutkan pemrosesan javascript dan menutup () jendela. IE akan gagal dengan ini karena memanggil fungsi close () tanpa menunggu panggilan print () selesai. Jendela popup akan ditutup sebelum pencetakan selesai.
Salah satu cara untuk mengatasinya adalah dengan menggunakan event "onafterprint" tetapi saya tidak merekomendasikannya kepada Anda karena event ini hanya berfungsi di IE.
Cara terbaik adalah menutup jendela popup setelah dialog cetak ditutup (pencetakan selesai atau dibatalkan). Saat ini, jendela popup akan difokuskan dan Anda dapat menggunakan acara "onfocus" untuk menutup popup.
Untuk melakukan ini, cukup masukkan kode yang disematkan javascript ini di jendela popup Anda:
<script type="text/javascript"> window.print(); window.onfocus=function(){ window.close();} </script>
Semoga ini hepls ;-)
Memperbarui:
Untuk browser chrome baru, mungkin masih terlalu cepat ditutup, lihat di sini . Saya telah menerapkan perubahan ini dan berfungsi untuk semua browser saat ini: 2/29/16
setTimeout(function () { window.print(); }, 500); window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }
sumber
window.onload = function () { window.print(); setTimeout(window.close, 500); };
Inilah yang saya pikirkan, saya tidak tahu mengapa ada penundaan kecil sebelum menutup.
window.print(); setTimeout(window.close, 0);
sumber
Hanya:
window.print(); window.close();
Berhasil.
sumber
Scripts may close only the windows that were opened by it.
peringatan.window.onafterprint = function(){ window.close()};
Saya hanya ingin menulis apa yang telah saya lakukan dan apa yang berhasil untuk saya (karena tidak ada hal lain yang saya coba yang berhasil).
Saya memiliki masalah bahwa IE akan menutup jendela sebelum dialog cetak muncul.
Setelah banyak trial and error og testing inilah yang saya mulai:
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();
Sepertinya ini berfungsi di semua browser.
sumber
Kode ini bekerja dengan sempurna untuk saya:
<body onload="window.print()" onfocus="window.close()">
Ketika halaman terbuka itu membuka dialog cetak secara otomatis dan setelah mencetak atau membatalkan itu menutup jendela.
Semoga membantu,
sumber
Tentu ini mudah diselesaikan dengan melakukan ini:
<script type="text/javascript"> window.print(); window.onafterprint = window.close(); </script>
Atau jika Anda ingin melakukan sesuatu seperti misalnya pergi ke halaman sebelumnya.
<script type="text/javascript"> window.print(); window.onafterprint = back; function back() { window.history.back(); } </script>
sumber
window.onafterprint = window.close();
haruswindow.onafterprint = window.close;
Mantan ditunjuk dengan hasil dariwindow.close()
keonafterprint
. Ini akan menyebabkanwindow.close()
berjalan segera saat penangan disetel, dan tidak ada yang dijalankan saatonafterprint
acara dimunculkan. Yang terakhir ditetapkanwindow.close
sebagai pengendali kejadian, yang kita inginkan.window.print();
dialog cetak ditutup. Jika ini terjadi,onafterprint
acara bisa dimunculkan sebelumonafterprint
ditetapkan. Jadi, akan lebih baik untukwindow.onafterprint = window.close;
datang sebelumnyawindow.print();
. Jika tidak, pendekatan yang digunakan dalam jawaban ini bekerja lebih baik daripada pendekatan berbasis onfocus atau setTimeout yang disarankan oleh jawaban lain.Ini adalah solusi lintas-browser yang sudah diuji di Chrome, Firefox, Opera pada 2016/05.
Ingatlah bahwa Microsoft Edge memiliki bug yang tidak akan menutup jendela jika pencetakan dibatalkan. Tautan Terkait
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); } }
sumber
Menggunakan Chrome Saya mencoba beberapa saat untuk mendapatkan
window.onfocus=function() { window.close(); }
dan<body ... onfocus="window.close()">
bekerja. Hasil saya:Saya juga mencoba
<body onload="window.print(); window.close()" >
yang mengakibatkan jendela tertutup bahkan sebelum saya dapat mengklik apa pun di dialog cetak.Saya tidak bisa menggunakan keduanya. Jadi saya menggunakan sedikit Jquery untuk memantau status dokumen dan kode ini berfungsi untuk saya.
<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>
Pastikan Anda telah memasukkan jquery dan kemudian copy / paste ini ke dalam html yang Anda cetak. Jika pengguna telah mencetak, menyimpan sebagai PDF atau membatalkan pekerjaan cetak, jendela / tab akan otomatis hancur sendiri. Catatan: Saya hanya menguji ini di chrome.
Sunting
Seperti yang Jypsy tunjukkan di komentar, status fokus dokumen tidak diperlukan. Anda cukup menggunakan jawaban dari noamtcohen, saya mengubah kode saya untuk itu dan berhasil.
sumber
yang ini bekerja untuk saya:
<script>window.onload= function () { window.print();window.close(); } </script>
sumber
Yang berikut berhasil untuk saya:
function print_link(link) { var mywindow = window.open(link, 'title', 'height=500,width=500'); mywindow.onload = function() { mywindow.print(); mywindow.close(); } }
sumber
Ini bekerja dengan baik di Chrome 59:
window.print(); window.onmousemove = function() { window.close(); }
sumber
Cukup bungkus window.close dengan event handler onafterprint, itu berhasil untuk saya
printWindow.print(); printWindow.onafterprint = () => printWindow.close();
sumber
Saya mencoba banyak hal yang tidak berhasil. Satu-satunya hal yang berhasil bagi saya adalah:
window.print(); window.onafterprint = function () { window.close(); }
diuji di chrome.
sumber
Solusi berikut berfungsi untuk versi IE9, IE8, Chrome, dan FF yang lebih baru mulai 2014-03-10. Skenarionya begini: Anda berada di jendela (A), di mana Anda mengklik tombol / tautan untuk meluncurkan proses pencetakan, lalu jendela baru (B) dengan konten yang akan dicetak dibuka, dialog pencetakan segera ditampilkan, dan Anda dapat membatalkan atau mencetak, lalu jendela baru (B) menutup secara otomatis.
Kode berikut memungkinkan ini. Kode javascript ini harus ditempatkan di html untuk jendela A (bukan untuk jendela 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); };
Tombol / tautan untuk meluncurkan proses hanya untuk menjalankan fungsi ini, seperti di:
openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');
sumber
Cetak dan tutup jendela tab baru dengan php dan javascript dengan sekali klik tombol
sumber
jquery:
$(document).ready(function(){ window.print(); setTimeout(function(){ window.close(); }, 3000); });
sumber
Ini bekerja paling baik untuk saya menyuntikkan HTML ke dalam popup seperti
<body onload="window.print()"...
Di atas berfungsi untuk IE, Chrome, dan FF (di Mac) tetapi tidak ada FF di Windows.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>';
sumber
Inilah yang saya lakukan ....
Aktifkan jendela untuk mencetak dan menutup sendiri berdasarkan parameter kueri.
Membutuhkan jQuery. Dapat dilakukan di _Layout atau halaman master untuk bekerja dengan semua halaman.
Idenya adalah untuk melewatkan parameter di URL yang memberi tahu halaman untuk dicetak dan ditutup, jika parameter disetel maka event jQuery "ready" mencetak jendela, dan kemudian saat halaman dimuat penuh (setelah dicetak) "onload" disebut yang menutup jendela. Semua langkah yang tampaknya ekstra ini adalah menunggu jendela dicetak sebelum menutup sendiri.
Dalam acara tambahkan dan onload tubuh html yang memanggil printAndCloseOnLoad (). Dalam contoh ini kami menggunakan cshtm, Anda juga bisa menggunakan javascript untuk mendapatkan param.
<body onload="sccPrintAndCloseOnLoad('@Request.QueryString["PrintAndClose"]');">
Di javascript tambahkan fungsi.
function printAndCloseOnLoad(printAndClose) { if (printAndClose) { // close self without prompting window.open('', '_self', ''); window.close(); } }
Dan acara siap jQuery.
$(document).ready(function () { if (window.location.search.indexOf("PrintAndClose=") > 0) print(); });
Sekarang saat membuka URL apa pun, cukup tambahkan parameter string kueri "PrintAndClose = true" dan itu akan mencetak dan menutup.
sumber
Bagi saya, solusi terakhir saya adalah campuran dari beberapa jawaban:
var newWindow = window.open(); newWindow.document.open(); newWindow.document.write('<html><link rel="stylesheet" href="css/normalize-3.0.2.css" type="text/css" />' + '<link rel="stylesheet" href="css/default.css" type="text/css" />' + '<link rel="stylesheet" media="print" href="css/print.css" type="text/css" />'); newWindow.document.write('<body onload="window.print();" onfocus="window.setTimeout(function() { window.close(); }, 100);">'); newWindow.document.write(document.getElementById(<ID>).innerHTML); newWindow.document.write('</body></html>'); newWindow.document.close(); newWindow.focus();
sumber
Inilah yang berhasil untuk saya (2018/02). Saya membutuhkan permintaan terpisah karena cetakan saya belum ada di layar. Berdasarkan beberapa tanggapan luar biasa di atas, yang saya ucapkan terima kasih kepada Anda semua, saya perhatikan:
w.onload
harus tidak ditetapkan sebelumw.document.write(data)
.Tampaknya aneh karena Anda ingin memasang kail terlebih dahulu. Dugaan saya: kail sudah ditembakkan saat membuka jendela tanpa konten. Karena ditembakkan, tidak akan menyala lagi. Namun, bila masih ada pemrosesan yang sedang berlangsung dengan yang baru
document.write()
maka pengait akan dipanggil saat pemrosesan telah selesai.w.document.close()
masih dibutuhkan. Jika tidak, tidak ada yang terjadi.Saya telah menguji ini di Chrome 64.0, IE11 (11.248), Edge 41.16299 (edgeHTML 16.16299), FF 58.0.1. Mereka akan mengeluh tentang popup, tetapi dicetak.
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>
sumber
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(); };
Inilah solusi ES2016 saya.
sumber
Ini bekerja untuk saya dengan sempurna @holger, namun, saya telah memodifikasinya dan lebih cocok untuk saya, jendela sekarang muncul dan menutup segera setelah Anda menekan tombol cetak atau batal.
function printcontent() { var disp_setting="toolbar=yes,location=no,directories=yes,menubar=yes,"; disp_setting+="scrollbars=yes,width=300, height=350, left=50, top=25"; var content_vlue = document.getElementById("content").innerHTML; var w = window.open("","", disp_setting); w.document.write(content_vlue); //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(); }"
sumber
Ini berhasil untuk saya 11/2020
<body onafterprint="window.close()">
... sederhana.sumber
IE memiliki (punya?) Peristiwa
onbeforeprint
danonafterprint
: Anda bisa menunggu untuk itu, tetapi itu hanya akan bekerja di IE (yang mungkin atau mungkin tidak ok).Cara lainnya, Anda dapat mencoba dan menunggu fokus kembali ke jendela dari dialog cetak dan menutupnya. Amazon Web Services melakukan ini dalam dialog cetak faktur mereka: Anda menekan tombol cetak, ini membuka tampilan ramah-cetak dan segera membuka dialog printer. Jika Anda menekan cetak atau membatalkan dialog cetak menutup dan kemudian tampilan ramah-cetak segera menutup.
sumber
Ada banyak kesulitan saat membuat hal-hal seperti ini berfungsi di semua browser.
Saya awalnya ingin melakukan hal yang sama - buka halaman baru dengan gaya untuk dicetak, cetak menggunakan JS, lalu tutup lagi. Ini adalah mimpi buruk.
Pada akhirnya, saya memilih untuk hanya mengklik ke halaman yang dapat dicetak dan kemudian menggunakan JS di bawah ini untuk memulai pencetakan, kemudian mengarahkan diri saya sendiri ke tempat yang ingin saya tuju setelah selesai (dengan variabel yang ditetapkan dalam PHP dalam contoh ini).
Saya telah menguji ini di Chrome dan Firefox pada OSX dan Windows, dan IE11-8, dan ini berfungsi pada semua (meskipun IE8 akan membeku sebentar jika Anda tidak benar-benar menginstal printer).
Selamat berburu (mencetak).
<script type="text/javascript"> window.print(); //this triggers the print setTimeout("closePrintView()", 3000); //delay required for IE to realise what's going on window.onafterprint = closePrintView(); //this is the thing that makes it work i function closePrintView() { //this function simply runs something you want it to do document.location.href = "'.$referralurl.'"; //in this instance, I'm doing a re-direct } </script>
sumber
gunakan saja java script ini
function PrintDiv() { var divContents = document.getElementById("ReportDiv").innerHTML; var printWindow = window.open('', '', 'height=200,width=400'); printWindow.document.write('</head><body >'); printWindow.document.write(divContents); printWindow.document.write('</body></html>'); printWindow.document.close(); printWindow.print(); printWindow.close(); }
itu akan menutup jendela setelah tombol kirim atau batalkan klik
sumber
Pada IE11, event onfocus dipanggil dua kali, sehingga pengguna diminta untuk menutup jendela dua kali. Ini dapat dicegah dengan sedikit perubahan:
<script type="text/javascript"> var isClosed = false; window.print(); window.onfocus = function() { if(isClosed) { // Work around IE11 calling window.close twice return; } window.close(); isClosed = true; } </script>
sumber
Ini bekerja untuk saya di FF 36, Chrome 41 dan IE 11. Bahkan jika Anda membatalkan pencetakan, dan bahkan jika Anda menutup dialog pencetakan dengan kanan atas "X".
var newWindow=window.open(); newWindow.document.open(); newWindow.document.write('<HTML><BODY>Hi!</BODY></HTML>'); //add your content newWindow.document.close(); newWindow.print(); newWindow.onload = function(e){ newWindow.close(); }; //works in IE & FF but not chrome //adding script to new document below makes it work in chrome //but alone it sometimes failed in FF //using both methods together works in all 3 browsers var script = newWindow.document.createElement("script"); script.type = "text/javascript"; script.text = "window.close();"; newWindow.document.body.appendChild(script);
sumber
setTimeout(function () { window.print(); }, 500); window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }
Ini bekerja dengan sempurna untuk saya. Semoga membantu
sumber
Ini berfungsi untuk saya di Chrome (belum pernah mencoba yang lain)
$(function(){ window.print(); $("body").hover(function(){ window.close(); }); });
sumber