Détection de la fin du téléchargement de fichiers dans les navigateurs
La génération et le téléchargement dynamiques de fichiers peuvent être un défi lorsqu'il s'agit de fournir des commentaires aux utilisateurs. Cet article examine un scénario dans lequel un serveur génère un fichier en réponse à une requête, mais le navigateur ne fournit pas d'indication claire du moment où le téléchargement est terminé.
Le problème : les limitations de la détection d'événements
Le problème : les limitations de la détection d'événements
L'auteur a eu du mal à détecter la fin du téléchargement dans son scénario où le fichier était généré dynamiquement et enregistré dans une iframe cachée. L'événement « load » sur l'iframe ne s'est pas déclenché de manière cohérente dans tous les navigateurs, ce qui a conduit à un indicateur peu fiable.
Solution alternative : interrogation côté client
Si le cookie est présent et correspond au jeton, le L'indicateur "en attente" est masqué.
Réponse côté serveur
Le code côté serveur répond en définissant un cookie avec le nom "fileDownloadToken" lorsque le La requête contient une valeur de jeton non vide. Ce cookie sert à signaler au code côté client que le téléchargement est terminé.
Implémentation du code
function blockResubmit() { // ... downloadTimer = window.setInterval(function() { var token = getCookie("fileDownloadToken"); if (token == downloadToken || attempts == 0) { unblockSubmit(); } attempts--; }, 1000); }
Exemple de JavaScript côté client :
$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();
Exemple PHP côté serveur :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!