it-swarm.com.de

Chrome: window.print () Druckdialogfeld wird erst geöffnet, nachdem die Seite neu geladen wurde (Javascript).

Ich stehe vor einem wirklich seltsamen Problem. Ich rufe window.print () von einer Javascript-Datei auf. Das funktioniert gut in Safari, IE, Firefox ... und bis vor zwei Stunden funktionierte es auch in Chrome. (Version 29.0.1547.57)

Ich habe nichts Wesentliches an meiner Javascript-Datei geändert (wirklich - ich habe nur ein paar Kommentare entfernt ...), aber was jetzt passiert, ist wirklich komisch: In Chrome wird der Druckdialog nicht geöffnet, wenn window.print () aufgerufen wird. Nichts passiert. Wenn ich dann auf reload drücke, öffnet sich sofort der Druckdialog.

Das Verhalten im anderen Browser hat sich nicht geändert. Beim Debuggen in Chrome kann ich sehen, dass window.print () wie erwartet aufgerufen wird und das Skript danach fortgesetzt wird. Nur der Druckdialog wird erst angezeigt, wenn Sie Neu laden drücken.

Hat jemand jemals so etwas erlebt? Ich habe auch versucht, window.print () in setTimeout () aufzurufen, aber das hat nichts geändert. Beim Debuggen scheint der Inhalt der Seite, die gedruckt werden soll, perfekt geladen zu sein. 

Es tut mir leid zu fragen, aber ich habe während der Recherche nichts gefunden. Jede Hilfe wäre dankbar!

Vielen Dank!

21
oskar1983

Wasiim hat recht, es gibt einen Chrome-Fehler, bei dem window.print() nicht funktioniert, wenn ein <video>-Tag im DOM vorhanden ist. Ich habe es gelöst, indem ich diese Funktion aufgerufen habe:

function printPage() {
    window.print();

    //workaround for Chrome bug - https://code.google.com/p/chromium/issues/detail?id=141633
    if (window.stop) {
        location.reload(); //triggering unload (e.g. reloading the page) makes the print dialog appear
        window.stop(); //immediately stop reloading
    }
    return false;
}
14
noypiscripter

Aus meiner Erfahrung ist dies auf anhaltenden Hintergrundverkehr zurückzuführen, z. ajax-Aufrufe und ähnliches verhindern, dass Chrome das Gefühl hat, dass diese Seite vollständig geladen ist. Durch das Neuladen wird der gesamte Datenverkehr unterbrochen, und der Druckdialog wird geöffnet. Dies ist eine besondere Angelegenheit in Visual Studio 2013, bei der BrowserLink im Hintergrund ständig abhakt. Dies kann getestet werden, indem BrowserLink mit der folgenden Einstellung deaktiviert wird:

<configuration>
    <appSettings>
        <add key="vs:EnableBrowserLink" value="false"/>
    </appSettings>
</configuration>
7
Steven Wilber

Ich habe genau das gleiche Problem mit Chrome. Sie müssen die Seite manuell neu laden:

    <a href="javascript:window.print();window.location.reload()">Print</a> 
2
Tepliuk

Wenn jemand VS2013 mit Chrome verwendet, wird dieses Problem durch die BrowserLink-Funktion verursacht.

siehe SO Antwort hier

2
Francisco

Ähnliches Verhalten in Safari. Es wird durch geöffnete HTTP-Anfragen im Hintergrund verursacht.

Wenn eine HTTP-Anforderung ausgeführt wird, wird window.print() erfolgreich ausgeführt, es wird jedoch kein Dialog geöffnet!

Dieses Problem wird auftreten, wenn Sie eine lange Abfrage verwenden (für Server Push) Da der Client die HTTP-Verbindung schon lange geöffnet hat, wird window.print() niemals funktionieren.

0
Martin

Ich bin am sichersten, dass Sie dieses Problem haben, weil Sie ein Videoelement auf Ihrer Seite haben - höchstwahrscheinlich ein MP4.

Wenn Sie dieses Video deaktivieren oder stattdessen ein OGV-Video haben, sollte der Druckvorgang einwandfrei funktionieren. Aufgrund der Einschränkungen der Chrome-Implementierung von Chrome ist dies ein Fehler in Chrome. Es ist auch wichtig zu beachten, dass die Druckfunktionen korrekt sind, wenn der Benutzer manuell mit Strg-p/cmd-p druckt

http://code.google.com/p/chromium/issues/detail?id=141633

Hoffe das hilft :)

0
Wasiim