Yazdırma iletişim kutusu kapandıktan sonra pencereyi otomatik olarak kapat


89

Kullanıcı bir düğmeyi tıkladığında açık bir sekmem var. On onloadBen yazdırma iletişim kutusunu ekrana getirmek zorunda, ancak kullanıcı sekme kendini kapatmak eğer yazıcıya gönderdikten sonra, yazdırmak mümkün olup olmadığını sordu. Bunun yapılıp yapılamayacağından emin değilim. Kullanmayı denedim setTimeout();, ancak kullanıcının dikkati dağılabileceği ve sekmeyi yeniden açması gerekebileceği için belirli bir süre geçmedi. Bunu başarmanın bir yolu var mı?



Yanıtlar:


117

print () çağrısından hemen sonra pencereyi kapatmaya çalışırsanız, pencereyi hemen kapatabilir ve print () çalışmayacaktır. Yapmamanız gereken şey bu :

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

Bu çözüm Firefox'ta çalışacaktır, çünkü print () çağrısında yazdırma tamamlanana kadar bekler ve ardından javascript'i işlemeye ve pencereyi kapatmaya () devam eder. IE, print () çağrısının yapılmasını beklemeden close () işlevini çağırdığı için bu konuda başarısız olacaktır. Açılır pencere, yazdırma tamamlanmadan kapatılacaktır.

Bunu çözmenin bir yolu "onafterprint" olayını kullanmaktır, ancak bu olaylar yalnızca IE'de çalıştığı için bunu size önermiyorum.

En iyi yol , yazdırma iletişim kutusu kapatıldıktan sonra açılır pencereyi kapatmaktır (yazdırma tamamlanır veya iptal edilir). Şu anda açılır pencereye odaklanılacak ve açılır pencereyi kapatmak için "onfocus" olayını kullanabilirsiniz.

Bunu yapmak için, bu javascript gömülü kodu açılır pencerenize eklemeniz yeterlidir:

<script type="text/javascript">
window.print();
window.onfocus=function(){ window.close();}
</script>

Umarım hepls ;-)

Güncelleme:

Yeni krom tarayıcılar için, yine de çok erken kapanabilir buraya bakın . Bu değişikliği uyguladım ve mevcut tüm tarayıcılar için çalışıyor: 29.02.2016

        setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

Değeri ne olursa olsun, bu IE8'de başarısız görünüyor. Pencere, yazdırma iletişim kutusu gösterilmeden hemen önce kapanır.
Heath

15
Chrome dahili olarak yazdırmayı işlediğinden, bu noktada krom için işe yaramıyor gibi görünmektedir, yazdırma iletişim kutusu yüklendiğinde pencerenin odağı kaybolmaz ve bu nedenle yazdırma tamamlandığında odak yeniden kazanılmaz. Bunun Chrome için çalışmasını sağlamanın herhangi bir yolu var mı?
jlbriggs

6
Şubat 2016 itibarıyla bu ve diğer odak () tabanlı yanıtların HİÇBİRİ artık Chrome'da çalışmaktadır. Tek çalışan çözüm @noamtcohen (ne yazık ki çok düşük bir oy sayısıyla).
Jpsy

2
Sanırım en son Chrome sürümü, sayfadaki resimler yüklenene kadar yazdırma iletişim kutusunu göstermiyor, ancak daha önce kapatıyor, bu nedenle sayfa yüklenmeden önce kapanıyor (yazdırma iletişim kutusu asla gösterilmez). Düzeltmek içinwindow.onload = function () { window.print(); setTimeout(window.close, 500); };
Brian Leishman

5
Yukarıdaki çözüm artık çalışmıyor, lütfen pencereyi kapatmak için olay dinleyicisini onafterprint ekleyin. Window.onafterprint = function () {window.close ()};
Rahat,

91

Bunu düşündüm, kapanmadan önce neden küçük bir gecikme olduğunu bilmiyorum.

 window.print();
 setTimeout(window.close, 0);

1
Bu düşük puanlı cevabın şu anda doğru olması ilginçtir. Şubat 2016 itibarıyla odak () tabanlı yanıtların hiçbiri artık Chrome'da çalışmamaktadır. Bu çözüm, Windows ve OS X, IE9 +, Android Chrome ve IOS Safari'de FF, Chrome ve Safari'de çalışır. Sadece eski IE'lerde onay diyalogları yaşadık. Diğerleri sorunsuz bir şekilde kapanır.
Jpsy

6
17 Mart itibariyle, bu benim için tam olarak Chrome'da (56) olduğu gibi işe yaramadı, ancak zaman aşımına biraz zaman ekledi. window.print (); setTimeout (window.close, 500);
jAC

JAC'ın da belirttiği gibi, bunun çalışması için daha fazla zaman gerekiyordu. Benimkinde 10ms yeterli değildi, ama 100 idi. Baskı önizlemenin işlenmesinin ne kadar süreceği meselesi gibi görünüyor. Benimki 10 ms olarak ayarlandığında, sayfanın yalnızca kısmen işlenmiş bir sürümünü yazdırdı. 100 ile her şeyi aldım.
Jacob Ewing

1
Bunu genişletmek için, yazdırma penceresi tamamen oluşturulduktan sonra (yine de bir macbook'ta kromda) zaman aşımı duraklatılmış ve geri kalanı pencere kapatıldıktan sonra sayılmış gibi görünüyor.
Jacob Ewing

1
0'a ihtiyacınız yok, bu varsayılandır
Brian Leishman

14

Sadece:

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

İşe yarıyor.


2
Bu, Chrome'da benim için güvenilir bir şekilde çalışmıyor. Bazen çalışır, ancak bazen pencere, yazdırma iletişim kutusu açılmadan hemen kapanır. Zaman aşımını 5000'e çıkararak bunun olmasını önleyebilirim, ancak bazen yazdırdıktan sonra pencerenin kapanması 5 saniyeye kadar sürebilir. Burada ne olduğundan tam olarak emin değilim, ancak farklı tarayıcılarda güçlü olma ihtimali düşük görünüyor.
speedarius

1
Aşağıda belirtildiği gibi, tarayıcılar arası tam çözüm daha karmaşıktır.
Eric

1
Unutmayın: Scripts may close only the windows that were opened by it.uyarı.
Cas Bloem

Yukarıdaki çözüm artık, olay dinleyici ekleyin çalışmaz don onafterprint yakın pencereye. window.onafterprint = function(){ window.close()};
Rahat,

13

Sadece ne yaptığımı ve benim için işe yarayan şeyi yazmak istiyorum (denediğim hiçbir şey işe yaramadığı için).

Yazdırma iletişim kutusu kalkmadan önce IE'nin pencereleri kapatması sorunuyla karşılaştım.

Çok sayıda deneme yanılma testinden sonra işe koyulmam gereken şey şu:

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();

Bu, tüm tarayıcılarda çalışıyor gibi görünüyor.


çalışıyor gibiydi. artık yok, kodumu aşağıya göndereceğim.
Remco

10

Bu kod benim için mükemmel çalıştı:

<body onload="window.print()" onfocus="window.close()">

Sayfa açıldığında, otomatik olarak yazdırma iletişim kutusunu açar ve yazdırmadan veya iptal ettikten sonra pencereyi kapatır.

Umarım yardımcı olur,


html veya jsp değil yazdırmak için pdf açtıysanız bu doz işe yaramazsa nereye onload body koyabilirim?
shareef

9

Elbette bunu yaparak kolayca çözülebilir:

      <script type="text/javascript">
         window.print();
         window.onafterprint = window.close();
      </script>

Ya da örneğin bir şey yapmak istiyorsanız önceki sayfaya gidin.

    <script type="text/javascript">
        window.print();
        window.onafterprint = back;

        function back() {
            window.history.back();
        }
    </script>

window.close ();
Mustafa

Not: window.onafterprint = window.close();olmalı window.onafterprint = window.close;eski atar sonuç arasında window.close()hiç onafterprint. Bu window.close(), işleyici ayarlandığında hemen çalışmasına ve onafterprintolay ortaya çıktığında hiçbir şeyin çalışmamasına neden olur . İkincisi, window.closeistediğimiz şey olan olay işleyicisi olarak atar .
Kei

Ayrıca bazı tarayıcılarda kod yürütme window.print();, yazdırma iletişim kutusu kapatılıncaya kadar duraklatılır . Bu olduğunda, onafterprintolayın onafterprintatanmadan önce ortaya çıkması mümkündür . Böylece daha window.onafterprint = window.close;önce gelmek daha iyi olur window.print();. Aksi takdirde, bu cevapta kullanılan yaklaşım, diğer cevapların önerdiği onfocus veya setTimeout tabanlı yaklaşımlardan daha iyi sonuç verir.
Kei

8

Bu, 2016/05 tarihine kadar Chrome, Firefox, Opera'da test edilmiş bir çapraz tarayıcı çözümüdür .

Akılda atın Microsoft Kenar bir hata var baskı iptal edildiyse pencereyi kapatmak olmaz. İlgili Bağlantı

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

7

Chrome'u kullanarak window.onfocus=function() { window.close(); }ve <body ... onfocus="window.close()"> çalışmasını sağlamak için bir süre denedim . Benim sonuçlarım:

  1. Baskı diyaloğumu kapattım, hiçbir şey olmadı.
  2. Tarayıcımdaki pencereleri / sekmeleri değiştirdim, yine de hiçbir şey.
  3. ilk pencereme / sekmeme geri döndüm ve ardından window.onfocus olayı pencereyi kapatarak tetiklendi.

Ayrıca <body onload="window.print(); window.close()" >, yazdırma diyaloğunda herhangi bir şeyi tıklayamadan pencerenin kapanmasına neden olan şeyi de denedim .

Ben ikisini de kullanamazdım. Bu yüzden belge durumunu izlemek için biraz Jquery kullandım ve bu kod benim için çalışıyor.

<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>

Sadece jquery eklediğinizden emin olun ve ardından bunu yazdırdığınız html'ye kopyalayıp yapıştırın. Kullanıcı yazdırdıysa, PDF olarak kaydettiyse veya yazdırma işini iptal ettiyse, pencere / sekme otomatik olarak kendini yok edecektir. Not: Bunu yalnızca kromda test ettim.

Düzenle

Jypsy'nin yorumlarda belirttiği gibi, belge odak durumuna gerek yoktur. Noamtcohen'deki cevabı basitçe kullanabilirsiniz, kodumu buna değiştirdim ve işe yarıyor.


Bu çözüm, kullanıcının İptal veya Yazdır'ı seçmek yerine köşesinde "X" bulunan açılır pencereyi kapatması durumunda orijinal pencerenin takılmasına neden olur. @JFK'nın başlangıçta işaret ettiği Juan'ın çözümüyle aynı sorun.
Clayton

Yukarıdaki javascript, bir pop-up'ta veya benim yaptığım gibi yeni bir sekmede açılmış olsun, yazdırılan html'ye yerleştirilmemelidir. Bu nedenle bu javascript'in orijinal pencere üzerinde hiçbir etkisi yoktur.
Nado11

5

bu benim için çalışıyor:

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

5

Aşağıdakiler benim için çalıştı:

function print_link(link) {
    var mywindow = window.open(link, 'title', 'height=500,width=500');   
    mywindow.onload = function() { mywindow.print(); mywindow.close(); }
}

5

Bu, Chrome 59'da iyi çalışır:

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

5

Sadece sarmak window.close onafterprint olay işleyici tarafından, bu benim için çalıştı

printWindow.print();
printWindow.onafterprint = () => printWindow.close();

Safari v12 gerektirir
Paul Brady

4

İşe yaramayan birçok şeyi denedim. Benim için işe yarayan tek şey şuydu:

window.print();
window.onafterprint = function () {
    window.close();
}

krom üzerinde test edilmiştir.


3

Aşağıdaki çözüm, 2014-03-10 itibarıyla IE9, IE8, Chrome ve FF'nin daha yeni sürümleri için çalışmaktadır. Senaryo şudur: yazdırma işlemini başlatmak için bir düğme / bağlantıya tıkladığınız bir pencerede (A) bulunuyorsunuz, ardından yazdırılacak içeriğin bulunduğu yeni bir pencere (B) açılıyor, yazdırma iletişim kutusu hemen gösteriliyor, iptal edebilir veya yazdırabilirsiniz, ardından yeni pencere (B) otomatik olarak kapanır.

Aşağıdaki kod buna izin verir. Bu javascript kodu, pencere A için html'ye yerleştirilecektir (pencere B için değil):

/**
 * 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);
};

İşlemi başlatmak için düğme / bağlantı, aşağıdaki gibi, bu işlevi basitçe çağırmalıdır:

openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');

Kullanıcı işlemi yazdırdığı veya iptal ettiği sürece Chrome'da çalışır ANCAK kullanıcı pencereyi (B) kapatırsa, pencere (A) kilitlenir (Chrome'da mı dedim?). Jsfiddle.net/qy6QV/2/show'u test edin (Chrome'da) ve pencereyi kapatın. Sonra yeniden yüklemeyi deneyin ... asıldı.
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>

Tek tuşla php ve javascript ile yeni sekme penceresini yazdırın ve kapatın


2

jquery:

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

1

Bu, benim için en çok HTML'yi pop-up'a enjekte etmek için çalıştı.Yukarıdaki <body onload="window.print()"... IE, Chrome ve FF (Mac'te) için çalışıyor ancak Windows'ta FF yok.

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>';

1

İşte yaptığım şey ...

Pencereyi bir sorgu parametresine göre yazdırmak ve kapatmak için etkinleştirin.

JQuery gerektirir. Tüm sayfalarla çalışmak için _Layout veya ana sayfada yapılabilir.

Buradaki fikir, URL'de sayfaya yazdırıp kapatmasını söyleyen bir parametre geçirmektir, eğer param ayarlanmışsa, jQuery "ready" olayı pencereyi yazdırır ve sayfa tamamen yüklendiğinde (yazdırdıktan sonra) "onload" pencereyi kapatan denir. Tüm bu görünüşte fazladan adımlar, kendisini kapatmadan önce pencerenin yazdırmasını beklemektir.

Html gövdesinde, printAndCloseOnLoad () öğesini çağıran add ve onload olayı. Bu örnekte cshtm kullanıyoruz, param almak için javascript de kullanabilirsiniz.

<body onload="sccPrintAndCloseOnLoad('@Request.QueryString["PrintAndClose"]');">

Javascript'te işlevi ekleyin.

function printAndCloseOnLoad(printAndClose) {
    if (printAndClose) {
        // close self without prompting
        window.open('', '_self', ''); window.close();
    }
}

Ve jQuery hazır olayı.

$(document).ready(function () {
    if (window.location.search.indexOf("PrintAndClose=") > 0)
        print();
});

Şimdi herhangi bir URL'yi açarken, "PrintAndClose = true" sorgu dizesi parametresini ekleyin ve yazdırıp kapanacaktır.


1

Benim için son çözümüm birkaç cevabın karışımıydı:

    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();

1

Benim için işe yarayan şey buydu (2018/02). Baskım henüz ekranda görünmediği için ayrı bir talebe ihtiyacım vardı. Yukarıdaki mükemmel yanıtlardan bazılarına dayanarak, hepinize teşekkür ederim, fark ettim:

  • w.onloadgerekir değil önce ayarlanmalıdır w.document.write(data).
    Tuhaf görünüyor çünkü kancayı önceden takmak istersiniz. Tahminim: pencereyi içerik olmadan açarken kanca zaten ateşlendi. Ateşlendiği için bir daha ateşlenmeyecek. Ancak, hala yenisiyle devam eden bir işlem varsa, işlem bittiğinde document.write()kanca çağrılacaktır.
  • w.document.close()hala gereklidir. Aksi takdirde hiçbir şey olmaz.

Bunu Chrome 64.0, IE11 (11.248), Edge 41.16299 (edgeHTML 16.16299), FF 58.0.1'de test ettim. Pop-up'lardan şikayet edecekler, ancak yazdırılıyor.

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>

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();
};

İşte ES2016 çözümüm.


1
Merhaba Stuart, Stack Overflow'a hoş geldiniz! Bu kodun neden OP'ye ve diğer kullanıcılara daha fazla yardımcı olmak için çalıştığını açıklayabilir misiniz? Teşekkürler!
heather

1

Bu benim için mükemmel çalışıyor @holger, ancak, onu değiştirdim ve bana daha iyi uyuyor, pencere şimdi açılır ve yazdır veya iptal düğmesine bastığınızda hemen kapanır.

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();
}"

1

Bu benim için 11/2020 çalıştı <body onafterprint="window.close()">... basit.


0

IE'de onbeforeprintve onafterprintolayları vardı (var mı?) : Bunu bekleyebilirsiniz, ancak yalnızca IE üzerinde çalışacaktır (bu uygun olabilir veya olmayabilir).

Alternatif olarak, odağın yazdırma iletişim kutusundan pencereye dönmesini ve kapatmasını bekleyebilirsiniz. Amazon Web Services bunu fatura yazdırma iletişim kutularında yapar: yazdır düğmesine bastığınızda, yazdırmaya uygun görünümü açar ve hemen yazıcı iletişim kutusunu açar. Yazdır'a tıklarsanız veya iptal ederseniz, yazdırma iletişim kutusu kapanır ve ardından yazdırmaya uygun görünüm hemen kapanır.


0

Tarayıcılarda bunun gibi şeylerin çalışması için çok fazla acı var.

Başlangıçta aynı şeyi yapmak istiyordum - baskı için yeni bir sayfa açın, JS kullanarak yazdırın ve ardından tekrar kapatın. Bu bir kabustu.

Sonunda, basitçe yazdırılabilir sayfaya tıklamayı ve ardından bir baskı başlatmak için aşağıdaki JS'yi kullanmayı seçtim, ardından işim bittiğinde kendimi gitmek istediğim yere yönlendirdim (bu örnekte PHP'de bir değişken ile).

Bunu, OSX ve Windows üzerinde Chrome ve Firefox'ta ve IE11-8'de test ettim ve hepsinde çalışıyor (gerçi aslında kurulu bir yazıcınız yoksa IE8 bir süre donacak).

Mutlu avlar (baskı).

<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>

0

sadece bu java betiğini kullan

 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();
}

düğmesi tıkladıktan veya gönderdikten sonra pencereyi kapatacak


0

IE11'de onfocus olayı iki kez çağrılır, bu nedenle kullanıcıdan iki kez pencereyi kapatması istenir. Bu, küçük bir değişiklikle önlenebilir:

<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>

0

Bu benim için FF 36, Chrome 41 ve IE 11'de çalıştı. Yazdırmayı iptal etseniz ve yazdırma iletişim kutusunu sağ üst "X" ile kapatsanız bile.

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);

0
setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

Benim için mükemmel çalışıyor. Umarım yardımcı olur


0

Bu benim için Chrome'da çalışıyor (başkalarını denemedim)

$(function(){
    window.print();
    $("body").hover(function(){
        window.close();
    });
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.