In unserem aktuellen Projekt stellen wir einen PDF-Download zur Verfügung, der vom Benutzer über ein HTML-Formular, das er einreicht, angepasst werden kann. Es dauert einige Sekunden, um das PDF dynamisch zu erzeugen, und ich möchte dies visualisieren, z. indem Sie die Senden-Schaltfläche deaktivieren, bis der Download beginnt. Leider konnte ich keinen Weg finden zu erkennen, wann der Download startet *. Ich würde also nicht wissen, wann ich den Submit-Button wieder aktivieren soll.Gibt es eine Möglichkeit, den Start eines Downloads in JavaScript zu erkennen?
Ich habe bereits versucht, ein IFrame als Ziel meines HTML-Formulars anzugeben, in der Hoffnung, dass das onload
Ereignis ausgelöst werden würde. Es ist jedoch nicht - wahrscheinlich, weil das PDF mit einem "Content-disposition: attachment
" Header gesendet wird und es nicht tatsächlich in den IFrame geladen wird.
Die einzige Lösung, an die ich jetzt denken kann, besteht darin, das PDF in eine temporäre Datei auf dem Server zu erzeugen, die ich vermeiden möchte.
*) Lassen Sie mich das klarstellen: Ich müsste nicht wissen, ob der Download abgeschlossen ist oder ob er wirklich gestartet wurde. Ich möchte den Punkt erkennen, an dem der Browser den Benutzer fragt, ob er die Datei öffnen oder speichern soll. Ich denke, das passiert, wenn der Browser den HTTP-Header empfängt.
Möchten Sie wissen, wann der Download beginnt oder wann er abgeschlossen wird? Wie auch immer, ich glaube nicht, dass eine temporäre Datei einen Unterschied machen wird. Auf der Client-Seite können Sie nicht feststellen, ob die Datei auf dem Server oder im laufenden Betrieb erstellt wurde. – Prestaul
Sie reichen also das Formular ein, und die Antwort auf diese Einreichung ist eine PDF-Datei? Während der Pause befindet sich der Browser in dem Modus, in dem er auf eine Antwort vom Server wartet. ist das richtig? – Breton
@Breton: richtig! @Pretaul: Ich würde gerne wissen, wann der Download beginnt. So könnte ich eine temporäre Datei erstellen, eine HTML-Antwort an das versteckte IFrame übergeben und dann die temporäre Datei per JavaScript im Onload-Handler abrufen. –