Heim >Web-Frontend >js-Tutorial >Wie können wir den Abschluss des Browser-Datei-Downloads ohne Browser-Ereignisse zuverlässig erkennen?

Wie können wir den Abschluss des Browser-Datei-Downloads ohne Browser-Ereignisse zuverlässig erkennen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-23 21:11:14431Durchsuche

How Can We Reliably Detect Browser File Download Completion Without Browser Events?

Erkennen des Abschlusses des Browser-Datei-Downloads

Problembeschreibung

Für eine Seite mit einem dynamischen Datei-Download-Mechanismus ist eine visuelle Anzeige erforderlich Signal, wenn der Download abgeschlossen ist. Allerdings lösen Browser nicht immer Ereignisse aus, die den Dateiempfang anzeigen, wenn ein „Speichern“-Dialog erscheint.

Einschränkungen der Serverantwort

Die Bereitstellung einer „Content-Disposition: Der Header „Anhang“ weist Browser an, das Dialogfeld „Speichern“ anzuzeigen, unterdrückt jedoch das Laden des für das Ereignis verwendeten Iframes Überwachung.

Vorgeschlagene Lösung

Implementieren Sie eine clientbasierte Lösung unter Nutzung von JavaScript und serverseitigen Cookies:

Client-Algorithmus

  1. Generieren Sie ein eindeutiges Token.
  2. Senden Sie das Download-Anfrage mit dem Token.
  3. Zeigen Sie den „Warten“-Indikator an.
  4. Fragen Sie den Server in regelmäßigen Abständen nach einem Cookie mit dem Namen „fileDownloadToken“ ab, das mit dem Token übereinstimmt.
  5. Wenn Wenn das Cookie gefunden wird, entfernen Sie den „Warten“-Indikator.

Server Algorithmus

  1. Extrahieren Sie das Token aus der Anfrage.
  2. Erstellen Sie ein Cookie mit dem Namen „fileDownloadToken“ und setzen Sie seinen Wert auf das empfangene Token.

Beispiel Implementierung

  • Clientseitiges JavaScript (vereinfacht)
var downloadToken = setFormToken();

var downloadTimer = setInterval(function() {
  var token = getCookie("fileDownloadToken");

  if(token == downloadToken) {
    unblockSubmit();
  }
}, 1000);
  • Serverseitiges PHP (vereinfacht)
// Set a cookie to unblock the submit button when download starts
$this->setCookieToken("downloadToken", $_GET["downloadToken"]);

$result = $this->sendFile();

Vorteile

  • Erfordert keine temporäre Dateierstellung.
  • Erkennt die Downloadbereitschaft von Dateien, ohne sich darauf verlassen zu müssen auf Ereignis-Listenern.
  • Kann an bestimmte Token-Namen und Cookies angepasst werden Einstellungen.

Das obige ist der detaillierte Inhalt vonWie können wir den Abschluss des Browser-Datei-Downloads ohne Browser-Ereignisse zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn