J'ai une page qui permet à l'utilisateur de télécharger un générées dynamiquement fichier. Il faut beaucoup de temps pour générer, donc j'aimerais vous montrer une "attente" de l'indicateur. Le problème est, je ne peux pas comprendre comment détecter si le navigateur a reçu le fichier, donc je ne peux cacher l'indicateur.
Je suis en train de faire la demande sous une forme cachée, qui publie sur le serveur, et les objectifs d'une iframe masqué par ses résultats. C'est le cas je ne remplacez pas l'ensemble de la fenêtre du navigateur avec le résultat. J'écoute pour une "charge" d'un événement sur l'iframe, dans l'espoir qu'il va se déclencher quand le téléchargement est terminé.
- Je retourner un "Content-Disposition: attachment" en-tête avec le fichier, ce qui provoque le navigateur pour afficher le dialogue "Enregistrer". Mais le navigateur ne prend pas le feu à une "charge" de l'événement dans l'iframe.
Une approche que j'ai essayé en utilisant un multi-partie de la réponse. Afin d'envoyer un fichier HTML vide, ainsi que le fichier téléchargeable. Par exemple:
Content-type: multipart/x-mixed-replace;boundary="abcde"
--abcde
Content-type: text/html
--abcde
Content-type: application/vnd.fdf
Content-Disposition: attachment; filename=foo.fdf
file-content
--abcde
Cela fonctionne dans Firefox; il reçoit le vide d'un fichier HTML, les feux de la "charge" de l'événement, puis affiche le dialogue "Enregistrer" pour télécharger ce fichier. Mais ceci ne fonctionne pas sur IE et Safari, c'est à dire les feux de la "charge" de l'événement, mais ne pas télécharger le fichier, et Safari télécharge le fichier (avec le mauvais nom et le contenu-type), et de ne pas le feu à la "charge" de l'événement.
Une autre approche pourrait être de faire un appel à lancer la création du fichier, puis interroger le serveur jusqu'à ce qu'il est prêt, puis de télécharger le fichier créé. Mais je préfère éviter de créer des fichiers temporaires sur le serveur.
Quelqu'un aurait-il une meilleure idée?