Fenster automatisch schließen, nachdem der Druckdialog geschlossen wurde

85

Ich habe eine Registerkarte geöffnet, wenn der Benutzer auf eine Schaltfläche klickt. Auf dem habe onloadich es den Druckdialog aufrufen lassen, aber der Benutzer hat mich gefragt, ob es möglich ist, dass sich die Registerkarte nach dem Senden an den Drucker zum Drucken selbst schließen kann. Ich bin mir nicht sicher, ob dies möglich ist. Ich habe versucht, zu verwenden setTimeout();, aber es ist kein definierter Zeitraum, da der Benutzer möglicherweise abgelenkt wird und die Registerkarte erneut öffnen muss. Gibt es eine Möglichkeit, dies zu erreichen?

Tsundoku
quelle

Antworten:

110

Wenn Sie versuchen, das Fenster unmittelbar nach dem Aufruf von print () zu schließen, wird das Fenster möglicherweise sofort geschlossen und print () funktioniert nicht. Dies ist , was Sie nicht tun sollten :

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

Diese Lösung funktioniert in Firefox, da sie beim Aufruf von print () wartet, bis der Druckvorgang abgeschlossen ist, und dann die Verarbeitung von Javascript fortsetzt und das Fenster schließt (). Der IE schlägt damit fehl, da er die Funktion close () aufruft, ohne auf den Aufruf von print () zu warten. Das Popup-Fenster wird geschlossen, bevor der Druckvorgang abgeschlossen ist.

Eine Möglichkeit, dies zu lösen, ist die Verwendung des Ereignisses "onafterprint". Ich empfehle es Ihnen jedoch nicht, da diese Ereignisse nur im IE funktionieren.

Am besten schließen Sie das Popup-Fenster, sobald der Druckdialog geschlossen ist (der Druckvorgang ist abgeschlossen oder abgebrochen). In diesem Moment wird das Popup-Fenster fokussiert und Sie können das Ereignis "onfocus" zum Schließen des Popups verwenden.

Fügen Sie dazu einfach diesen eingebetteten Javascript-Code in Ihr Popup-Fenster ein:

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

Hoffe das hepls ;-)

Aktualisieren:

Für neue Chrome-Browser wird es möglicherweise noch zu früh geschlossen, siehe hier . Ich habe diese Änderung implementiert und sie funktioniert für alle aktuellen Browser: 29.02.16

        setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }
serfer2
quelle
Für das, was es wert ist, scheint dies in IE8 zu scheitern. Das Fenster wird unmittelbar vor dem Druckdialog geschlossen.
Heath
15
Dies scheint zu diesem Zeitpunkt für Chrome nicht zu funktionieren, da Chrome das interne Drucken übernimmt. Das Fenster verliert beim Laden des Druckdialogs nicht den Fokus und gewinnt daher nach dem Drucken nicht den Fokus zurück. Wie kann das für Chrome funktionieren?
Jlbriggs
6
Ab Februar 2016 funktioniert diese und KEINE der anderen auf focus () basierenden Antworten mehr in Chrome. Die einzige funktionierende Lösung ist die von @noamtcohen (leider mit einer sehr geringen Stimmenzahl).
Jpsy
2
Ich denke, die neueste Version von Chrome zeigt den Druckdialog erst an, wenn die Bilder auf der Seite geladen wurden, führt jedoch das Schließen vor aus, sodass die Seite vor dem Laden geschlossen wird (der Druckdialog wird nie angezeigt). Zu behebenwindow.onload = function () { window.print(); setTimeout(window.close, 500); };
Brian Leishman
2
Die obige Lösung funktioniert nicht mehr. Fügen Sie den Ereignis-Listener onafterprint hinzu , um das Fenster window.onafterprint = function () {window.close ()} zu schließen.
Rahat Hameed
90

Dies ist, was ich mir ausgedacht habe, ich weiß nicht, warum es eine kleine Verzögerung gibt, bevor ich schließe.

 window.print();
 setTimeout(window.close, 0);
noamtcohen
quelle
1
Es ist interessant, dass diese niedrig bewertete Antwort derzeit die richtige ist. Ab Februar 2016 funktioniert keine der auf focus () basierenden Antworten mehr in Chrome. Diese Lösung funktioniert in FF, Chrome und Safari unter Windows und OS X, IE9 +, Android Chrome und IOS Safari. Wir haben nur Bestätigungsdialoge in alten IEs erlebt. Alle anderen schließen nahtlos.
Jpsy
6
Ab dem 17. März funktionierte dies bei mir nicht genau wie in Chrome (56), aber es wurde etwas mehr Zeit für die Arbeitszeit benötigt. window.print (); setTimeout (window.close, 500);
JAC
Wie von jAC erwähnt, benötigte dies mehr Zeit, damit es funktionierte. Bei mir waren 10 ms nicht genug, aber 100 waren. Es scheint eine Frage zu sein, wie lange es dauert, die Druckvorschau zu rendern. Bei meiner Einstellung auf 10 ms wurde nur eine teilweise gerenderte Version der Seite gedruckt. Mit 100 habe ich das Ganze bekommen.
Jacob Ewing
1
Um das zu erweitern, scheint es, als ob das Timeout angehalten wird, sobald das Druckfenster vollständig gerendert ist (auf einem MacBook ohnehin in Chrom) und der Rest nach dem Schließen des Fensters gezählt wird.
Jacob Ewing
1
Sie brauchen die 0 nicht, es ist die Standardeinstellung
Brian Leishman
15

Gerade:

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

Es klappt.

Ying-Stil
quelle
2
Dies funktioniert bei mir auf Chrom nicht zuverlässig. Manchmal funktioniert es, aber manchmal wird das Fenster sofort geschlossen, bevor der Druckdialog angezeigt wird. Ich kann dies verhindern, indem ich das Zeitlimit auf 5000 erhöhe. Manchmal dauert es jedoch bis zu 5 Sekunden, bis das Fenster nach dem Drucken geschlossen wird. Ich bin mir nicht ganz sicher, was hier passiert, aber es scheint nicht wahrscheinlich, dass es in verschiedenen Browsern robust ist.
Speedarius
1
Wie unten erwähnt, ist die vollständige browserübergreifende Lösung komplizierter.
Eric
1
Vergessen Sie nicht die: Scripts may close only the windows that were opened by it.Warnung.
Cas Bloem
Die oben genannte Lösung funktioniert nicht mehr. Fügen Sie den Ereignis-Listener onafterprint hinzu , um das Fenster zu schließen. window.onafterprint = function(){ window.close()};
Rahat Hameed
12

Ich möchte nur schreiben, was ich getan habe und was für mich funktioniert hat (da nichts anderes, was ich versucht habe, funktioniert hat).

Ich hatte das Problem, dass der IE die Fenster schließen würde, bevor der Druckdialog angezeigt wurde.

Nach vielen Versuchen und Tests musste ich Folgendes tun:

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

Dies scheint in allen Browsern zu funktionieren.

Holger
quelle
schien zu funktionieren. Wenn dies nicht mehr der Fall ist, werde ich meinen Code unten veröffentlichen.
Remco
10

Dieser Code hat bei mir perfekt funktioniert:

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

Wenn die Seite geöffnet wird, wird der Druckdialog automatisch geöffnet und nach dem Drucken oder Abbrechen wird das Fenster geschlossen.

Ich hoffe es hilft,

Victor Olaru
quelle
Diese Dosis funktioniert nicht, wenn Sie PDF geöffnet haben, um nicht HTML oder JSP zu drucken. Wo kann ich dann den Körper laden?
Shareef
8

Dies ist eine browserübergreifende Lösung, die bereits getestet wurde bis 2016/05 auf Chrome, Firefox, Opera getestet wurde.

Beachten Sie, dass Microsoft Edge einen Fehler aufweist , der das Fenster nicht schließt, wenn der Druck abgebrochen wurde. Verwandter Link

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

Sicher ist dies leicht zu lösen:

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

Oder wenn Sie so etwas wie zum Beispiel tun möchten, gehen Sie zur vorherigen Seite.

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

        function back() {
            window.history.back();
        }
    </script>
Samuel Bié
quelle
window.close ();
Mustafa
7

Mit Chrome habe ich eine Weile versucht, das window.onfocus=function() { window.close(); }und das <body ... onfocus="window.close()"> zum Laufen zu bringen. Meine Ergebnisse:

  1. Ich hatte meinen Druckdialog geschlossen, nichts passierte.
  2. Ich habe Fenster / Tabs in meinem Browser geändert, immer noch nichts.
  3. wechselte zurück zu meinem ersten Fenster / Tab und dann wurde das Fenster.onfocus-Ereignis ausgelöst, das das Fenster schloss.

Ich habe auch versucht, <body onload="window.print(); window.close()" >was dazu führte, dass das Fenster geschlossen wurde, bevor ich überhaupt auf etwas im Druckdialog klicken konnte.

Beides konnte ich nicht benutzen. Also habe ich ein wenig Jquery verwendet, um den Dokumentstatus zu überwachen, und dieser Code funktioniert für mich.

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

Stellen Sie einfach sicher, dass Sie jquery eingefügt haben, und kopieren Sie diese und fügen Sie sie in das HTML ein, das Sie drucken. Wenn der Benutzer den Druckauftrag gedruckt, als PDF gespeichert oder abgebrochen hat, wird das Fenster / die Registerkarte automatisch selbst zerstört. Hinweis: Ich habe dies nur in Chrom getestet.

Bearbeiten

Wie Jypsy in den Kommentaren betonte, wird der Dokumentfokusstatus nicht benötigt. Sie können einfach die Antwort von noamtcohen verwenden, ich habe meinen Code dahingehend geändert und es funktioniert.

Nado11
quelle
Diese Lösung bewirkt, dass das ursprüngliche Fenster hängen bleibt, wenn der Benutzer das Popup mit dem "X" in der Ecke schließt, anstatt Abbrechen oder Drucken auszuwählen. Gleiches Problem wie Juans Lösung, auf die @JFK ursprünglich hingewiesen hat.
Clayton
Das obige Javascript darf nicht in den HTML-Code eingefügt werden, der gedruckt wird, unabhängig davon, ob es in einem Popup oder wie ich in einem neuen Tab geöffnet wird. Somit hat dieses Javascript keine Auswirkung auf das ursprüngliche Fenster.
Nado11
5

Dieser funktioniert für mich:

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

Folgendes hat bei mir funktioniert:

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

Wickeln Sie einfach window.close mit dem onafterprint-Ereignishandler ein, es hat bei mir funktioniert

printWindow.print();
printWindow.onafterprint = () => printWindow.close();
user10145303
quelle
Benötigt Safari v12
Paul Brady
4

Dies funktioniert gut in Chrome 59:

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

Die folgende Lösung funktioniert für neuere Versionen von IE9, IE8, Chrome und FF ab dem 10.03.2014. Das Szenario ist das folgende: Sie befinden sich in einem Fenster (A), in dem Sie auf eine Schaltfläche / einen Link klicken, um den Druckvorgang zu starten. Anschließend wird ein neues Fenster (B) mit dem zu druckenden Inhalt geöffnet. Der Druckdialog wird sofort angezeigt. und Sie können entweder abbrechen oder drucken, und dann wird das neue Fenster (B) automatisch geschlossen.

Der folgende Code ermöglicht dies. Dieser Javascript-Code ist im HTML für Fenster A (nicht für Fenster B) abzulegen:

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

Die Schaltfläche / der Link zum Starten des Prozesses muss lediglich diese Funktion aufrufen, wie in:

openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');
Juan Manuel Perez
quelle
Es funktioniert in Chrome, solange der Benutzer den Vorgang druckt oder abbricht, ABER wenn der Benutzer das Fenster (B) schließt, hängt das Fenster (A) (habe ich in Chrome gesagt?). Testen Sie (in Chrome) jsfiddle.net/qy6QV/2/show und schließen Sie das Fenster. Dann versuchen Sie es neu zu laden ... hing.
JFK
3

Ich habe viele Dinge ausprobiert, die nicht funktionierten. Das einzige, was für mich funktioniert hat, war:

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

auf Chrom getestet.

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

Drucken und schließen Sie ein neues Registerkartenfenster mit PHP und Javascript mit einem einzigen Klick

Abhinandan Budavi
quelle
1

Dies funktionierte am besten für mich, indem ich HTML in das Popup einfügte, wie z. B. <body onload="window.print()"... Das oben Gesagte funktioniert für IE, Chrome und FF (auf Mac), aber kein FF unter 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>';
user1322092
quelle
1

Folgendes mache ich ...

Aktivieren Sie das Fenster zum Drucken und Schließen basierend auf einem Abfrageparameter.

Benötigt jQuery. Kann in _Layout oder Masterseite ausgeführt werden, um mit allen Seiten zu arbeiten.

Die Idee ist, einen Parameter in der URL zu übergeben, der die Seite zum Drucken und Schließen auffordert. Wenn der Parameter festgelegt ist, druckt das jQuery-Ereignis "ready" das Fenster, und wenn die Seite vollständig geladen ist (nach dem Drucken), wird der "onload" wird aufgerufen, wodurch das Fenster geschlossen wird. All diese scheinbar zusätzlichen Schritte bestehen darin, auf das Drucken des Fensters zu warten, bevor Sie sich selbst schließen.

Fügen Sie im HTML-Text das Ereignis add and onload hinzu, das printAndCloseOnLoad () aufruft. In diesem Beispiel verwenden wir cshtm. Sie können auch Javascript verwenden, um param abzurufen.

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

Fügen Sie im Javascript die Funktion hinzu.

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

Und jQuery Ready Event.

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

Wenn Sie nun eine URL öffnen, fügen Sie einfach den Abfragezeichenfolgenparameter "PrintAndClose = true" hinzu und er wird gedruckt und geschlossen.

RitchieD
quelle
1

Für mich war meine endgültige Lösung eine Mischung aus mehreren Antworten:

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

Das hat bei mir funktioniert (2018/02). Ich brauchte eine separate Anfrage, da mein Druck noch nicht auf dem Bildschirm angezeigt wurde. Aufgrund einiger der oben genannten hervorragenden Antworten, für die ich Ihnen allen danke, ist mir aufgefallen:

  • w.onloaddarf nicht vorher eingestellt werden w.document.write(data).
    Es scheint seltsam, weil Sie den Haken vorher setzen möchten. Meine Vermutung: Der Haken wird bereits beim Öffnen des Fensters ohne Inhalt ausgelöst. Da es abgefeuert wird, wird es nicht wieder abgefeuert. Wenn jedoch noch eine neue document.write()Verarbeitung ausgeführt wird, wird der Hook aufgerufen, wenn die Verarbeitung abgeschlossen ist.
  • w.document.close()ist noch erforderlich. Sonst passiert nichts.

Ich habe dies in Chrome 64.0, IE11 (11.248), Edge 41.16299 (edgeHTML 16.16299), FF 58.0.1 getestet. Sie werden sich über Popups beschweren, aber es wird gedruckt.

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

Hier ist meine ES2016-Lösung.

Stuart
quelle
1
Hallo Stuart, und willkommen bei Stack Overflow! Können Sie erklären, warum dieser Code dem OP und anderen Benutzern mehr hilft? Vielen Dank!
Heidekraut
1

Dies funktioniert perfekt für mich @holger, aber ich habe es geändert und passe besser zu mir. Das Fenster wird jetzt geöffnet und geschlossen, sobald Sie auf die Schaltfläche Drucken oder Abbrechen klicken.

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

jquery:

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

IE hatte (hat?) Die onbeforeprintund onafterprintEreignisse: Sie könnten darauf warten, aber es würde nur auf IE funktionieren (was möglicherweise in Ordnung ist oder nicht).

Alternativ können Sie versuchen, zu warten, bis der Fokus aus dem Druckdialog zum Fenster zurückkehrt, und ihn schließen. Amazon Web Services führt dies in den Rechnungsdruckdialogen aus: Wenn Sie auf die Schaltfläche Drucken klicken, wird die druckfreundliche Ansicht geöffnet und sofort der Druckerdialog geöffnet. Wenn Sie auf Drucken klicken oder abbrechen, wird der Druckdialog geschlossen und die druckfreundliche Ansicht wird sofort geschlossen.

Femi
quelle
0

Es ist sehr schmerzhaft, solche Dinge in allen Browsern zum Laufen zu bringen.

Ich wollte ursprünglich das Gleiche tun - eine neue Seite für den Druck öffnen, mit JS drucken und dann wieder schließen. Das war ein Albtraum.

Am Ende habe ich mich dafür entschieden, einfach auf die druckbare Seite zu klicken und dann mit dem folgenden JS einen Druckvorgang zu starten. Dann habe ich mich an den Ort weitergeleitet, an den ich gehen wollte, wenn ich fertig bin (in diesem Fall mit einer in PHP festgelegten Variablen).

Ich habe dies in Chrome und Firefox unter OSX und Windows sowie in IE11-8 getestet und es funktioniert unter allen (obwohl IE8 ein wenig einfriert, wenn Sie keinen Drucker installiert haben).

Viel Spaß beim Jagen (Drucken).

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

Verwenden Sie einfach dieses Java-Skript

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

Das Fenster wird nach dem Klicken auf die Schaltfläche "Senden" oder "Abbrechen" geschlossen

user3373573
quelle
0

In IE11 wird das Ereignis onfocus zweimal aufgerufen, sodass der Benutzer zweimal aufgefordert wird, das Fenster zu schließen. Dies kann durch eine geringfügige Änderung verhindert werden:

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

Dies funktionierte für mich in FF 36, Chrome 41 und IE 11. Auch wenn Sie den Druck abbrechen und den Druckdialog mit dem oberen rechten "X" schließen.

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

Es funktioniert perfekt für mich. Ich hoffe es hilft

Klajdi Dosti
quelle
0

Dies funktioniert für mich auf Chrome (habe andere nicht ausprobiert)

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

Ich habe es versucht und es funktioniert

var popupWin = window.open('', 'PrintWindow', 
'width=650,height=650,location=no,left=200px');
popupWin.document.write(data[0].xmldata);
popupWin.print();
popupWin.close();
user13548
quelle