Je suis à la recherche de plus de réflexions sur la meilleure façon d'initier un téléchargement de fichier à partir de Javascript.Lancement d'un téléchargement de fichier qui fonctionne bien, même dans IE?
Best way to initiate a download? a beaucoup de bonnes idées qui peuvent se résumer ainsi:
- Réglez le src sur une iframe
- Utilisez window.location.replace()
- Utilisez une page avec un en-tête de meta refresh
- Utilisez un window.open()
- Laissez le serveur de fichiers directement sortie, réglage du Content-type et Content-Disposition
Toutes ces approches fonctionnent bien pour les navigateurs avec lesquels j'ai testé, sauf pour IE8. Avec IE8, je reçois un tas de problèmes:
- Le iframe ne fonctionne pas à cause de cookies par l'environnement que je utilise. Je pense que je devrais activer les en-têtes P3P pour résoudre ceci, mais l'environnement ne me permet pas de placer des en-têtes, ainsi P3P est dehors
- Le window.location.replace() fonctionne excepté cela dans IE8, le barre d'adresse de la fenêtre change à l'URL du fichier et la fenêtre sous-jacente est vide Une fois le fichier téléchargé est ouvert
- l'approche meta refresh fonctionne également, mais encore la barre d'adresse change à l'URL du fichier et la fenêtre sous-jacente est vide après le téléchargement des fichiers
- Je tente désespérément d'éviter window.open() à esquiver un bloc de popup ker problèmes
- L'environnement du serveur que je suis ne vous permettra pas de sortir le fichier lui-même, comme vous pouvez le faire à dire, l'objet de réponse de ASP.NET
Je n'ai même pas essayé ces méthodes avec IE6 ou IE7, donc il peut y avoir d'autres surprises là-bas. Donc, est-ce que quelqu'un a d'autres suggestions pour lancer un téléchargement dans IE, où (1) pas de popups sont impliqués et (2) le fichier peut être sauvegardé ou ouvert et (3) aucune fenêtre vide est laissée, (3) en utilisant juste Javascript, HTML et une URL à un fichier?
Denver Mike
Pourriez-vous élaborer sur l'environnement du serveur? –
Hi Joel, Ceci est conçu pour fonctionner sur les serveurs Salesforce.com - ils ont leur propre langage de programmation appelé Apex. –