หากคุณพยายามปิดหน้าต่างหลังการเรียก print () มันอาจปิดหน้าต่างทันทีและ print () จะไม่ทำงาน นี่คือสิ่งที่คุณไม่ควรทำ :
window.open();
...
window.print();
window.close();
โซลูชันนี้จะใช้งานได้ใน Firefox เนื่องจากในการเรียก print () จะรอจนกว่าการพิมพ์จะเสร็จสิ้นจากนั้นจะประมวลผล javascript ต่อไปและปิด () หน้าต่าง IE จะล้มเหลวเนื่องจากเรียกใช้ฟังก์ชัน close () โดยไม่รอให้การเรียก print () เสร็จสิ้น หน้าต่างป๊อปอัพจะปิดก่อนการพิมพ์จะเสร็จสิ้น
วิธีหนึ่งในการแก้ปัญหาคือใช้เหตุการณ์ "onafterprint" แต่ฉันไม่แนะนำให้คุณใช้เพราะเหตุการณ์เหล่านี้ใช้ได้เฉพาะใน IE
วิธีที่ดีที่สุดคือปิดหน้าต่างป๊อปอัปเมื่อปิดกล่องโต้ตอบการพิมพ์ (พิมพ์เสร็จหรือยกเลิก) ในขณะนี้หน้าต่างป๊อปอัปจะถูกโฟกัสและคุณสามารถใช้เหตุการณ์ "ออนโฟกัส" เพื่อปิดป๊อปอัปได้
ในการดำเนินการนี้เพียงแค่ใส่โค้ดที่ฝังจาวาสคริปต์นี้ในหน้าต่างป๊อปอัปของคุณ:
<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); }