2016-08-08 11 views
2

Es ist bekannt, dass es keine Möglichkeit gibt festzustellen, ob ein Benutzer in dem von window.print() erstellten Druckfenster auf Drucken oder Abbrechen geklickt hat.Bestätigungsmeldung nach window.print()

Also bin ich mit der nächstbesten Sache fest, die eigentlich den Benutzer fragen soll, ob sie erfolgreich gedruckt haben.

Ich habe dies:

$(document).ready(function(){ 

    window.print(); 

    var a = confirm('Confirm printing as successfull and mark Job Cards as Released?'); 
    if(a == true) { 
     $.post('PrintSuccess'); 
     window.location = '/Menu'; 
    } 
}); 

Das Problem ist, erscheint das Bestätigungsfenster vor dem Druckfenster nach oben ist, wie kann das Druckfenster zum ersten Mal erscheint gewährleisten?

+0

'setTimeout()'? –

+0

Scheint nicht in Chrom zu arbeiten –

Antwort

2

Es gibt ein paar Möglichkeiten, um sicherzustellen, dass ein print dialog beendet ist, bevor ein Code-Block ausgeführt wird. Die Browserunterstützung variiert, daher müssen Sie möglicherweise einige davon kombinieren, um Ihren Anforderungen zu entsprechen. Siehe unten Stapelüberhang-Themen.

Der folgende Code sollte für die meisten modernen Browsern.

var printCompleteCallback = function() { 
    var conf = confirm('Confirm printing as successfull and mark Job Cards as Released?'); 
    if (conf) { 
     if (a == true) { 
      $.post('PrintSuccess'); 
      window.location = '/Menu'; 
     } 
    } 
} 

window.print(); 
if (window.onafterprint) { //check if browser supports window.onafterprint event handler (Firefox and IE) 
    $(window).one("afterprint", printCompleteCallback); 
} 
else { //Use setTimeout solution if onafterprint is not supported (Chrome) 
    setTimeout(printCompleteCallback, 0); 
} 
+0

Code funktioniert in Chrom, danke. Wie funktioniert das if (window.onafterprint) Bit? –

+0

Es sollte überprüft werden, ob der Browser das Ereignis "onafterprint" unterstützt, aber es ist nicht ganz richtig. Es sollte 'if ('onafterprint' im Fenster)' –

+1

@ConnorBishop sein, 'window.onafterprint' ist ein Event-Handler, der ausgelöst wird, nachdem ein Druckdialog beendet wurde, aber [Browserunterstützung] (https: //developer.mozilla. org/de-DE/docs/Web/API/WindowEventHandler/onafterprint # Browser_compatibility) dafür ist sehr begrenzt. Also überprüfen wir, ob der Browser es unterstützt und verwenden Sie es, wenn dies der Fall ist. Wir greifen auf die 'setTimeout'-Lösung (die in Chrome funktioniert) zurück, wenn der Browser kein Nachdruckereignis unterstützt. Ich fügte dem Code, der es erklärte, Kommentare hinzu. – Ozan

0
window.onafterprint = function() { 
    var a = confirm('Confirm printing as successfull and mark Job Cards as Released?'); 
    if(a == true) { 
     $.post('PrintSuccess'); 
     window.location = '/Menu'; 
    } 
} 
+0

sollte erwähnt haben, ich verwende Chrom, sorry –

Verwandte Themen