Ich habe eine Registerkarte geöffnet, wenn der Benutzer auf eine Schaltfläche klickt. Auf dem habe onload
ich 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?
javascript
printing
Tsundoku
quelle
quelle
Antworten:
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 :
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:
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
quelle
window.onload = function () { window.print(); setTimeout(window.close, 500); };
Dies ist, was ich mir ausgedacht habe, ich weiß nicht, warum es eine kleine Verzögerung gibt, bevor ich schließe.
quelle
Gerade:
Es klappt.
quelle
Scripts may close only the windows that were opened by it.
Warnung.window.onafterprint = function(){ window.close()};
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:
Dies scheint in allen Browsern zu funktionieren.
quelle
Dieser Code hat bei mir perfekt funktioniert:
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,
quelle
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
quelle
Sicher ist dies leicht zu lösen:
Oder wenn Sie so etwas wie zum Beispiel tun möchten, gehen Sie zur vorherigen Seite.
quelle
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: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.
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.
quelle
Dieser funktioniert für mich:
quelle
Folgendes hat bei mir funktioniert:
quelle
Wickeln Sie einfach window.close mit dem onafterprint-Ereignishandler ein, es hat bei mir funktioniert
quelle
Dies funktioniert gut in Chrome 59:
quelle
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:
Die Schaltfläche / der Link zum Starten des Prozesses muss lediglich diese Funktion aufrufen, wie in:
quelle
Ich habe viele Dinge ausprobiert, die nicht funktionierten. Das einzige, was für mich funktioniert hat, war:
auf Chrom getestet.
quelle
Drucken und schließen Sie ein neues Registerkartenfenster mit PHP und Javascript mit einem einzigen Klick
quelle
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
quelle
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.
Fügen Sie im Javascript die Funktion hinzu.
Und jQuery Ready Event.
Wenn Sie nun eine URL öffnen, fügen Sie einfach den Abfragezeichenfolgenparameter "PrintAndClose = true" hinzu und er wird gedruckt und geschlossen.
quelle
Für mich war meine endgültige Lösung eine Mischung aus mehreren Antworten:
quelle
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.onload
darf nicht vorher eingestellt werdenw.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.
quelle
Hier ist meine ES2016-Lösung.
quelle
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.
quelle
jquery:
quelle
IE hatte (hat?) Die
onbeforeprint
undonafterprint
Ereignisse: 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.
quelle
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).
quelle
Verwenden Sie einfach dieses Java-Skript
Das Fenster wird nach dem Klicken auf die Schaltfläche "Senden" oder "Abbrechen" geschlossen
quelle
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:
quelle
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.
quelle
Es funktioniert perfekt für mich. Ich hoffe es hilft
quelle
Dies funktioniert für mich auf Chrome (habe andere nicht ausprobiert)
quelle
Ich habe es versucht und es funktioniert
quelle