Heim >Web-Frontend >js-Tutorial >Wie kann ich den Abschluss des Dateidownloads in einem Browser ohne konsistente „Lade'-Ereignisse zuverlässig erkennen?
Erkennen des Abschlusses des Datei-Downloads in Browsern
Dynamisches Generieren und Herunterladen von Dateien kann eine Herausforderung sein, wenn es darum geht, Benutzern Feedback zu geben. In diesem Artikel wird ein Szenario untersucht, in dem ein Server als Antwort auf eine Anfrage eine Datei generiert, der Browser jedoch keinen klaren Hinweis darauf liefert, wann der Download abgeschlossen ist.
Das Problem: Einschränkungen bei der Ereigniserkennung
Der Autor hatte Schwierigkeiten, den Download-Abschluss in seinem Szenario zu erkennen, in dem die Datei dynamisch generiert und in einem versteckten Iframe gespeichert wurde. Das „load“-Ereignis auf dem Iframe wurde nicht konsistent in allen Browsern ausgelöst, was zu einem unzuverlässigen Indikator führte.
Alternative Lösung: Clientseitiges Polling
Eine Lösung beinhaltet Verwendung eines clientseitigen Abfragemechanismus in JavaScript. Der Algorithmus funktioniert wie folgt:
Serverseitige Antwort
Der serverseitige Code antwortet, indem er ein Cookie mit dem Namen „fileDownloadToken“ setzt, wenn die Anfrage ein enthält nicht leerer Tokenwert. Dieses Cookie dient als Signal an den clientseitigen Code, dass der Download abgeschlossen ist.
Code-Implementierung
Beispiel für clientseitiges JavaScript:
function blockResubmit() { // ... downloadTimer = window.setInterval(function() { var token = getCookie("fileDownloadToken"); if (token == downloadToken || attempts == 0) { unblockSubmit(); } attempts--; }, 1000); }
Beispiel für serverseitiges PHP:
$TOKEN = "downloadToken"; // Sets a cookie so that when the download begins the browser can // unblock the submit button. $this->setCookieToken($TOKEN, $_GET[$TOKEN], false); $result = $this->sendFile();
Vorteile davon Ansatz
Das obige ist der detaillierte Inhalt vonWie kann ich den Abschluss des Dateidownloads in einem Browser ohne konsistente „Lade'-Ereignisse zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!