Sauvegarder le document généré par javascript
Javascript peut manipuler le document le navigateur affiche, donc la suivante:
<script>
document.write("<table><tr><td>Hola</td><td>Adios</td></tr></table>");
</script>
Fera le navigateur d'afficher une table comme si elle était à l'origine le document HTML:
<table>
<tr>
<td>Hola</td>
<td>Adios</td>
</tr>
</table>
Est-il une manière que je peux enregistrer/servir de ce document contenu?
Actuellement, nous avons bien généré des rapports à l'aide Ext-js, ce que je voudrais faire c'est d'avoir le "text/html" version ( je veux dire, quelque chose qui ne nécessite pas de javascript )
Donc, à la fin de la page, je voudrais ajouter un bouton : "Enregistrer sous blaba" et le document doit afficher le texte/version unie.
La seule façon que je pouvais penser en ce moment est, pour écrire le contenu dans une variable javascript comme:
var content = document.toString(); //or something magic like that.
//post it to the server
Puis après que la valeur pour le serveur, le serveur présente cette valeur.
<%=request.getParameter("content-text")%>
Mais semble très délicat.
Est-il une alternative?
MODIFIER
Ok, j'ai presque eu. Maintenant, j'ai juste besoin d'une nouvelle fenêtre de pop-up si l'option "voulez-vous enregistrer il montre"
C'est ce que j'ai obtenu jusqu'à présent
<script>
document.write("<div id='content'><table><tr><td>Hola</td><td>Adios</td></tr></table></div>");
function saveAs(){
var sMarkup = document.getElementById('content').innerHTML;
var oNewDoc = document.open('application/vnd.ms-excel');
oNewDoc.write( sMarkup + "<hr>" );
oNewDoc.close();
}
</script>
<input type="button" value="Save as" onClick="saveAs()"/>
La ligne:
var oNewDoc = document.open('application/vnd.ms-excel');
Doit spécifier le type de contenu, mais il est ignoré.
source d'informationauteur OscarRyz
Vous devez vous connecter pour publier un commentaire.
Voici la version mise à niveau pour ouvrir le contenu de la table .xls format.
Ce code est testé dans IE6 et est à l'aide de ActiveXObject de contrôle.
Espérons que cela vous aide à répondre à ur question. Crois-moi savoir si vous rencontrez des problèmes.
La paix.
À moins d'être sauvé côté client avec
File -> Save Page As...
vous aurez à faire exactement ce que vous proposez, l'affichage$('body').html()
à votre serveur et de les traiter en tant que texte.Ce lien semble expliquer exactement comment résoudre votre problème.
En fonction de votre navigateur exigences en matière de support, vous pouvez utiliser les données Uri
De base pour la preuve de concept (testé dans Firefox 3.5.3):
J'ai tiré de la base de 64 codage/décodage à partir d'exemples en ligne. Attention: l'une, que j'ai saisi inclus un URI coder avant de la base de 64 encoder que foiré moi pendant un certain temps.
Vous approchez de la réponse je pense. Le problème est que "
document.open(...)
" peut seulement de prendre le standard mime-types tels que 'text/html', 'text/plain' et quelques autresEt parce que votre code doit être:
Espère que cette aide.
Si c'est juste un rapport, vous pouvez utiliser JavaScript côté serveur pour générer, puis servir avec quel type MIME dont vous avez besoin...
Je ne pense pas que l'envoi de votre code html sur le serveur est une question difficile dans la solution. Il suffit de se rappeler de donner un lien à votre utilisateur de télécharger ce fichier. Cela peut être fait à l'aide d'un POSTE traditionnel, ou même en utilisant AJAX. Il dépend de la façon dont vous voulez que vos utilisateurs d'interagir si votre page.
À l'aide du traditionnel post, pourrais-tu mettre tout le code html contenu dans l'attribut value d'un input type hidden dans votre page, nommée "html_content" ou quelque chose comme ça, et quand l'utilisateur clique sur le bouton "enregistrer", vous envoyez votre utilisateur vers une autre page avec un lien le fichier. Vous envoyez le code html au serveur, un script crée un fichier dans un système de fichiers avec un nom unique, et renvoie un lien de téléchargement.
À l'aide d'AJAX, vous avez juste besoin de faire une requête AJAX POST le passage de cette variable, et alors votre script renvoie un lien de téléchargement, et vous dynamiquement le mettre dans votre html sans avoir besoin de recharger votre page, comme il était "seulement cliente côté".
De toute façon, vous serez de retour un lien vers la ressource que vous venez de créer dans votre système de fichiers avec une extension html. N'oubliez pas de générer des noms uniques dans votre serveur pour chaque fichier généré pour éviter les collisions.
Attention cependant que l'utilisation de innerHTML dans IE 6 (je ne sais pas si c'est IE comportement familial ou juste au sujet de la version 6) les majuscules toutes les balises et supprime les guillemets à partir d'attributs. Si vous avez l'intention de faire quelques post-traitement dans votre code html, être prudent.
Je ne sais pas comment jQuery ou d'autres bibliothèques JS se comporte dans de telles situations. Je conseille bien, ils ont beaucoup de compatibilité du navigateur vérifie l'abstraction de tous ces hacks que nous utilisons.
Voici mon code pour enregistrer le contenu généré par l'[côté client] par le JavaScript pour le local lecteur C: dans MSWord[.doc] format.
J'ai rapidement travaillé sur ur question et est venu avec ce morceau de code. Espérons que j'ai compris votre question correctement.
Les contraintes dans mon code sont
Ces le besoin d'être traités dans les versions à venir. (:
La paix.
Est votre javascript AJAX qui récupère le document.writeln() le contenu du serveur, ou avez-vous déjà de production de ce contenu lorsque la page est servi pour l'utilisateur ? Parce que si c'est le premier, je ne vois aucune raison pourquoi vous ne pouvez pas enregistrer toutes les variables /requêtes de la session de quelle que soit la technologie côté serveur à l'aide de votre et puis tout simplement de générer le texte brut des trucs à partir de ceux-ci. Sinon, vous aurez à suivre de voyager suggestion ci-dessus.
Puisque vous êtes à l'aide de Ext JS, vous avez probablement un objet de banque qui fournit des données à la grille? Vous devriez être capable d'extraire les données dont vous avez besoin en vous promenant dans le Magasin, et puis le format de la manière que vous voulez. Je ne pense pas que grattant les données à partir du code HTML généré est idéal.
Une fois que vous prenez les données dont vous avez besoin à partir de la grille et le format en texte, vous pouvez le POSTER à l'arrière-plan pour lancer un téléchargement (avec Content-Disposition: attachment etc.)
Si vous n'êtes pas concernés par la croix-navigateur, vous pouvez également utiliser les données: schéma d'URL pour lancer un téléchargement sans impliquer le backend.
Ce plugin fait le travail. Testé sur IE, FF & Chrome.
https://github.com/dcneiner/Downloadify