Salutations,Déclencher un téléchargement de fichier sans demande de serveur
je travaille sur une application JS qui fait un travail complexe et enregistre des informations (en fait, jusqu'à des centaines de lignes) sur une <div>
.
Mon but est d'avoir un bouton "Enregistrer le journal" qui déclenche la boîte de dialogue de téléchargement du navigateur pour enregistrer le contenu de ma connexion <div>
.
Plus de façon concise, ce sont les conditions requises pour cette fonction:
- L'utilisateur final doit avoir un contrôle total sur le fichier. Il/elle devrait être en mesure de sauvegarder/archiver pour référence future, l'envoyer au service d'assistance pour obtenir de l'aide pour résoudre un problème, le recharger dans l'application, etc. L'API de stockage Web de HTML5 n'aide pas ici être enregistré dans un emplacement défini par le navigateur et ne serait pas facilement récupérable sauf à partir du JS qui le crée).
- L'application doit pouvoir fonctionner hors ligne (au moins dans certaines circonstances). Cela, et l'efficacité, c'est pourquoi j'ai rejeté l'idée de POSTing les données sur le serveur pour le récupérer avec un en-tête "Content-disposition".
- Le fichier doit être correctement marqué comme
text/plain
, afin que le navigateur puisse suggérer des actions par défaut (comme "Ouvrir sur le bloc-notes") comme avec un téléchargement de fichier normal. Cela peut être considéré comme un aspect spécifique de la première exigence. Dire à l'utilisateur de copier-coller le contenu du<div>
dans un éditeur de texte et l'enregistrer à partir de là est vraiment horrible, et c'est exactement pourquoi je tente d'éviter.
J'ai recherché sur ce site, sur les sites WHATWG et W3C et sur le web en général sans succès. Est-ce faisable du tout?
Le plus proche que j'ai obtenu est en utilisant un data:
url. Ma première tentative, en exécutant une action POST, n'a pas réussi à obtenir un type de contenu, ce qui aurait pour effet de revenir à l'heuristique de l'agent UA. Je l'ai un peu mieux en appelant un lien <a>
pour ressembler à un bouton et en lui donnant un attribut type
, mais alors l'UA jouera trop mal et rendra le contenu au lieu de sauvegarder (et demande à l'utilisateur de sauvegarder le fichier depuis le navigateur à cette étape devient encore pire que l'approche copier-coller, puisque la sauvegarde de la page varie énormément d'un navigateur à l'autre).
S'il y avait juste un moyen de combiner un data:
url avec une allusion de type «content-disposition», les choses pourraient aller très bien.
Cordialement, Herenvardo
L'utilisation d'un plugin comme Flash est-elle hors de question? Je ne sais pas s'il est possible de faire avec le HTML standard, mais ce serait assez facile si Flash était une option ... –
J'ai eu une question similaire http://stackoverflow.com/questions/2832392/can-you- do-file-io-using-javascript-without-activex mais seulement une réponse. Je ne pense pas que ce soit possible cependant. –
Est-ce que le "copier dans le presse-papiers avec du code et dire à l'utilisateur de le coller dans le bloc-notes (ou éditeur de texte favori)" idée venir? Le presse-papiers peut gérer des mégaoctets, mais le bloc-notes pourrait s'étouffer avec quelques mégaoctets. D'autre part: voir http://stackoverflow.com/questions/17836273/export-javascript-data-to-csv-file-without-server-interaction – TWiStErRob