Tutup jendela secara otomatis setelah dialog pencetakan ditutup

89

Saya memiliki tab yang terbuka saat pengguna mengklik tombol. Pada onloadSaya 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?

Tsundoku
sumber

Jawaban:

117

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); }
serfer2
sumber
Untuk apa nilainya, ini tampaknya gagal di IE8. Jendela segera menutup sebelum dialog cetak ditampilkan.
Heath
15
ini tampaknya tidak berfungsi untuk chrome pada saat ini, karena chrome menangani pencetakan secara internal, jendela tidak akan kehilangan fokus saat dialog cetak dimuat, dan karenanya tidak akan mendapatkan kembali fokus saat pencetakan selesai. Adakah cara agar ini berfungsi untuk Chrome?
jlbriggs
6
Mulai Februari 2016, ini dan TIDAK ADA jawaban berbasis fokus () lainnya yang berfungsi di Chrome lagi. Satu-satunya solusi yang berfungsi adalah @noamtcohen (sayangnya dengan jumlah suara yang sangat rendah).
Jpsy
2
Saya pikir versi terbaru Chrome tidak menampilkan dialog cetak sampai gambar di halaman dimuat, tetapi menjalankan penutupan sebelumnya, jadi halaman ditutup sebelum dimuat (dialog cetak tidak pernah ditampilkan). Untuk memperbaikiwindow.onload = function () { window.print(); setTimeout(window.close, 500); };
Brian Leishman
5
Solusi di atas tidak berfungsi lagi, tambahkan event listener onafterprint untuk menutup jendela window.onafterprint = function () {window.close ()};
Rahat Hameed
91

Inilah yang saya pikirkan, saya tidak tahu mengapa ada penundaan kecil sebelum menutup.

 window.print();
 setTimeout(window.close, 0);
noamtcohen
sumber
1
Menarik bahwa jawaban berperingkat rendah saat ini adalah jawaban yang benar. Mulai Februari 2016, tidak ada lagi jawaban berbasis fokus () yang berfungsi di Chrome. Solusi ini berfungsi di FF, Chrome, dan Safari di Windows dan OS X, IE9 +, Android Chrome, dan iOS Safari. Kami hanya mengalami dialog konfirmasi di IE lama. Semua lainnya menutup dengan mulus.
Jpsy
6
Mulai 17 Maret, ini tidak berfungsi untuk saya persis seperti di Chrome (56) tetapi menambahkan beberapa waktu ke waktu istirahat berhasil. window.print (); setTimeout (window.close, 500);
jAC
Seperti yang disebutkan jAC, ini membutuhkan lebih banyak waktu agar dapat berfungsi. Bagi saya, 10ms tidak cukup, tapi 100 sudah. Tampaknya menjadi masalah berapa lama waktu yang dibutuhkan untuk membuat pratinjau cetak. Dengan milik saya diatur ke 10 ms, itu hanya mencetak versi halaman yang dirender sebagian. Dengan 100, saya mendapatkan semuanya.
Jacob Ewing
1
Untuk memperluasnya, tampaknya ~ seperti ~ waktu tunggu dijeda setelah jendela cetak dirender sepenuhnya (bagaimanapun juga, dalam chrome di macbook), dan sisanya dihitung setelah jendela ditutup.
Jacob Ewing
1
Anda tidak perlu 0, ini default
Brian Leishman
14

Hanya:

window.print();
window.close();

Berhasil.

Gaya Ying
sumber
2
Ini tidak bekerja dengan andal untuk saya di chrome. Terkadang berhasil, tetapi terkadang jendela langsung tertutup sebelum dialog cetak muncul. Saya dapat mencegah hal itu terjadi dengan menambah waktu tunggu menjadi 5000, namun terkadang perlu waktu hingga 5 detik untuk menutup jendela setelah mencetak. Saya tidak begitu yakin apa yang terjadi di sini, tetapi sepertinya tidak akan kuat di berbagai browser.
speedarius
1
Seperti disebutkan di bawah, solusi lintas-browser lengkap lebih rumit.
Eric
1
Jangan lupa: Scripts may close only the windows that were opened by it.peringatan.
Cas Bloem
Solusi di atas tidak berfungsi lagi, silakan tambahkan pendengar acara setelah mencetak untuk menutup jendela. window.onafterprint = function(){ window.close()};
Rahat Hameed
13

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.

Holger
sumber
sepertinya berhasil. tidak lagi, saya akan memposting kode saya di bawah ini.
Remco
10

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,

Victor Olaru
sumber
dosis ini tidak berfungsi jika Anda telah membuka pdf untuk mencetak bukan html atau jsp di mana kemudian saya dapat meletakkan onload body?
shareef
9

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>
Samuel Bié
sumber
window.close ();
Mustafa
Catatan: window.onafterprint = window.close();harus window.onafterprint = window.close;Mantan ditunjuk dengan hasil dari window.close()ke onafterprint. Ini akan menyebabkan window.close()berjalan segera saat penangan disetel, dan tidak ada yang dijalankan saat onafterprintacara dimunculkan. Yang terakhir ditetapkan window.closesebagai pengendali kejadian, yang kita inginkan.
Kei
Selain itu, di beberapa browser, eksekusi kode akan dijeda setelah window.print();dialog cetak ditutup. Jika ini terjadi, onafterprintacara bisa dimunculkan sebelum onafterprintditetapkan. Jadi, akan lebih baik untuk window.onafterprint = window.close;datang sebelumnya window.print();. Jika tidak, pendekatan yang digunakan dalam jawaban ini bekerja lebih baik daripada pendekatan berbasis onfocus atau setTimeout yang disarankan oleh jawaban lain.
Kei
8

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);
    }
}
Heroselohim
sumber
7

Menggunakan Chrome Saya mencoba beberapa saat untuk mendapatkan window.onfocus=function() { window.close(); }dan <body ... onfocus="window.close()"> bekerja. Hasil saya:

  1. Saya telah menutup dialog cetak saya, tidak ada yang terjadi.
  2. Saya mengubah jendela / tab di browser saya, masih tidak ada.
  3. diubah kembali ke jendela / tab pertama saya dan kemudian acara window.onfocus diaktifkan menutup jendela.

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.

Nado11
sumber
Solusi ini menyebabkan jendela asli macet jika pengguna menutup popup dengan "X" di pojok daripada memilih Batal atau Cetak. Masalah yang sama dengan solusi Juan, yang @JFK tunjukkan awalnya.
Clayton
Javascript di atas tidak dimaksudkan untuk ditempatkan di html yang sedang dicetak baik dibuka dalam sembulan atau, seperti yang saya lakukan, di tab baru. Jadi javascript ini tidak berpengaruh pada jendela asli.
Nado11
5

yang ini bekerja untuk saya:

<script>window.onload= function () { window.print();window.close();   }  </script>
arun.m
sumber
5

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(); }
}
Md Abu Sohib Hossain
sumber
5

Ini bekerja dengan baik di Chrome 59:

window.print();
window.onmousemove = function() {
  window.close();
}
maxhud
sumber
5

Cukup bungkus window.close dengan event handler onafterprint, itu berhasil untuk saya

printWindow.print();
printWindow.onafterprint = () => printWindow.close();
pengguna10145303
sumber
Membutuhkan Safari v12
Paul Brady
4

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.

Zeyad
sumber
3

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');
Juan Manuel Perez
sumber
Ia bekerja di Chrome selama pengguna mencetak atau membatalkan operasi TETAPI jika pengguna menutup jendela (B), jendela (A) hang (apakah saya katakan di Chrome?). Uji (di Chrome) jsfiddle.net/qy6QV/2/show dan tutup jendela. Kemudian coba muat ulang ... digantung.
JFK
2
<!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' >".number_format($rowitems[4],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[6],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[7],2)."</td>
              </tr>";
                $tot=$tot+$rowitems[7];
            }

            echo "<tr>
                <th style='text-align:right;font-sie:1px' colspan='4'>GRAND TOTAL</th>
                <th style='text-align:center;font-sie:1px' >".number_format($tot,2)."</th>
                </tr>";
            ?>
        </table>
     <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1px'>-----------------------------------------------</td>  
            </tr>
        </table>
        <br>
        <table width="100%">
            <tr>
                <th style='text-align:center;font-sie:1px'>Thank you Visit Again</th>  
            </tr>
        </table>
<script>
window.close();
</script>
</html>

Cetak dan tutup jendela tab baru dengan php dan javascript dengan sekali klik tombol

Abhinandan Budavi
sumber
2

jquery:

$(document).ready(function(){ 
  window.print();
  setTimeout(function(){ 
             window.close();
  }, 3000);
});
Armandof
sumber
1

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>';
pengguna1322092
sumber
1

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.

RitchieD
sumber
1

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();
Felipe
sumber
1

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.onloadharus tidak ditetapkan sebelum w.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>
Remco
sumber
1
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.

Stuart
sumber
1
Halo Stuart, dan selamat datang di Stack Overflow! Bisakah Anda menjelaskan mengapa kode ini berfungsi untuk membantu OP dan pengguna lain lebih banyak? Terima kasih!
heather
1

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();
}"
Abubakar Ahmed Ruma
sumber
1

Ini berhasil untuk saya 11/2020 <body onafterprint="window.close()">... sederhana.

Thor88
sumber
0

IE memiliki (punya?) Peristiwa onbeforeprintdan onafterprint: 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.

Femi
sumber
0

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>
boboshady
sumber
0

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

pengguna3373573
sumber
0

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>
Jakob Kofoed Janot
sumber
0

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);
James Bell
sumber
0
setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

Ini bekerja dengan sempurna untuk saya. Semoga membantu

Klajdi Dosti
sumber
0

Ini berfungsi untuk saya di Chrome (belum pernah mencoba yang lain)

$(function(){
    window.print();
    $("body").hover(function(){
        window.close();
    });
});
emmmm
sumber