Speichern Sie das Dokument, generiert Via javascript
Javascript manipulieren kann das Dokument browser angezeigt werden, so sind die folgenden:
<script>
document.write("<table><tr><td>Hola</td><td>Adios</td></tr></table>");
</script>
Wird die browser-Anzeige in einer Tabelle gerade so, als ob es das ursprüngliche HTML-Dokument:
<table>
<tr>
<td>Hola</td>
<td>Adios</td>
</tr>
</table>
Gibt es eine Möglichkeit, ich kann speichern und dienen diesem Dokument Inhalt?
Derzeit haben wir einige schön generiert Berichte mit Ext-js, was ich tun möchte, ist das "text/html" version ( ich meine, etwas, das nicht erfordert javascript )
Also am Ende der Seite würde ich mich fügen Sie eine Schaltfläche : "Speichern unter blaba" und das Dokument angezeigt werden soll der text/plain-version.
Nur so konnte ich glaube, jetzt ist, schreiben Sie den Inhalt in eine javascript-variable wie:
var content = document.toString(); //or something magic like that.
//post it to the server
Dann post, dass der Wert an den server, und den server präsentieren, Wert.
<%=request.getParameter("content-text")%>
Sieht aber sehr knifflig.
Gibt es eine alternative?
BEARBEITEN
Ok, fast hätte ich es bekam. Jetzt brauche ich nur das neue Fenster, um pop-up, so dass die option "möchten Sie es speichern, zeigt"
Dies ist, was ich habe, so weit
<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()"/>
Die Zeile:
var oNewDoc = document.open('application/vnd.ms-excel');
Sollten geben Sie den neuen Inhalt geben, aber es wird ignoriert.
InformationsquelleAutor OscarRyz | 2009-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die aktualisierte version zu öffnen, der Inhalt der Tabelle in .xls-format.
Dieser code ist getestet in IE6 und ist mit ActiveXObject Kontrolle.
Hoffe, das hilft bei der Beantwortung ur Frage. Laß mich wissen, wenn u irgendwelche Probleme.
Frieden.
Dieser code funktioniert gut, wenn es lokal ausgeführt wird[ohne die server-Umgebung]. Damit es funktioniert, in "server" - Umgebung müssen Sie einige Sicherheitseinstellungen erlauben die Erstellung von ActiveXObject in ur server-system. Treffer Extras>Internetoptionen - >Registerkarte "Sicherheit" >Stufe anpassen> stellen Sie sicher, dass "Eingabeaufforderung" ausgewählt ist, "Download von signierten und unsignierten activeX-Steuerelementen".Dann ist u werde erhalten eine Eingabeaufforderung, wenn der code ausgeführt wird. Wenn das nicht helfen, versuchen Sie, andere Verwandte activeX-Optionen. Aber stellen Sie sicher, u haben eine aktualisierte antivirus-Programm, b4 ändern der Sicherheits-Einstellungen, wenn im Fall, dass etwas schief wierd. :p
Ich lief diese als lokale html-Datei, siehe Bild: img11.imageshack.us/img11/8444/capturatx.png
ie6 den gleichen Fehler: img514.imageshack.us/img514/9154/capturadepantalla200910p.png
Ohh ich sehe, ich muss Sie MS-Excel installiert haben, richtig?
InformationsquelleAutor chong
Es sei denn, seine gespeicherten client-Seite mit
File -> Save Page As...
Sie haben genau das zu tun, was Sie vorschlagen, die Entsendung$('body').html()
zu Ihrem server und verarbeiten als text.Reyes: könnten Sie ein-Taste, öffne ein neues Fenster nur mit der Tabelle mit javascript, und speichern Sie.
Ich bin stecken in der "... ein neues Fenster öffnen" - Teil :-/
Reyes: Sie haben zu tun, es serverside ist Sie dennoch. Sie haben, um den full-client-Tabelle, Stelle es auf den server und öffnen Sie die neue "Seite" in einem neuen Fenster. Ich werde versuchen, mehr einen später.
stackoverflow.com/questions/10679927/...
InformationsquelleAutor Esteban Küber
Dieser link scheint, genau zu erklären, wie Ihr problem zu lösen.
Versuchen:
saveHTML($('body').html())
sir ,bitte haben Sie einen Blick auf stackoverflow.com/questions/10679927/...
sir ,bitte haben Sie einen Blick auf stackoverflow.com/questions/10679927/...
InformationsquelleAutor DVK
Je nach browser-Unterstützung Anforderungen, die Sie nutzen könnten Daten-URIs
Kern für proof-of-concept (getestet in Firefox 3.5.3):
Ich zog base 64 encode/decode von Beispielen online. Achtung: ich schnappte enthalten eine URI-encode vor der base 64 codieren, dass versaut mir für eine Weile.
InformationsquelleAutor Justin Love
Sind Sie immer nah an der Antwort, die ich denkt. Das problem ist, dass '
document.open(...)
' kann nur standard-mime-Typen wie "text/html', 'text/plain' und ein paar andereUnd weil der, dass Ihr code sollte sein:
Hoffe, das hilft.
InformationsquelleAutor NawaMan
Wenn es nur ein Bericht, Sie könnte verwenden server-side JavaScript erzeugen muss, und dann servieren Sie es mit dem, was MIME-Typ du brauchst...
Ist es tatsächlich. Kannst du mich in die richtige Richtung, server-side javascript bitte? Ich habe keine Ahnung.
Auf welcher Plattform ist Ihr server?
Ich habe es nie benutzt, aber SpiderMonkey ( mozilla.org/js/spidermonkey ), lassen wir Sie ausführen JS aus der command-Zeile ( blog.ianbicking.org/jslint-command-line.html ). Ich denke, man könnte dann SpiderMonkey als handler für Ihre server-side-scripts. Es gibt auch Jaxer, wenn Sie wollen, dass eine Ende-zu-Ende-Paket.
InformationsquelleAutor Kev
Denke ich nicht, dass das senden Sie Ihre html-server ist eine schwierige Lösung. Sie müssen nur daran zu erinnern, zu geben, ein link zu Ihrem Benutzer zum download dieser Datei. Dies kann mit einem traditionellen POST, oder sogar mit AJAX. Es hängt davon ab, wie Sie möchten, dass Ihre Benutzer zu kommunizieren, wenn Sie Ihre Seite.
Verwendung der herkömmlichen post, Sie könnten alle html-Inhalte in das value-Attribut eines input-type-hidden in Ihrer Seite, mit dem Namen "html_content" oder so ähnlich, und wenn der Benutzer klickt auf den Knopf "speichern" schicken Sie Ihre Benutzer auf eine andere Seite mit einem link tun, der Datei. Sie senden den html-server, ein Skript erstellt eine Datei in einem Dateisystem mit einem eindeutigen Namen zu, und gibt einen download-link.
AJAX verwenden, werden Sie nur brauchen, um ein AJAX-POST übergeben Sie diese variable, und dann dein Skript gibt einen download-link, und Sie dynamisch in den html - ohne Neuladen der Seite, wie war es "nur cliente Seite".
So oder so, du wirst wieder einen link zu der Ressource, die Sie gerade erstellt haben, in Ihr Dateisystem mit einem html-Erweiterung. Erinnern Sie generieren eindeutige Namen in Ihrem server für jede generierte Datei, um Kollisionen zu vermeiden.
Beachten Sie jedoch, dass die Verwendung von innerHTML im IE 6 (ich weiß nicht, ob dies ist ein IE-Familie Verhalten oder einfach nur über die 6-version) uppercases alle tags entfernt und Zitate von Parametern. Wenn Sie planen, tun einige post-processing in den html-Code, vorsichtig sein.
Ich weiß nicht, wie jQuery oder anderen JS-Bibliotheken verhält in solchen Situationen. Ich würde vorschlagen, mit ihm aber, Sie haben eine Menge von browser-Kompatibilität überprüft, zu abstrahieren, alle diese hacks, die wir verwenden.
'application/vnd.ms-excel'
ich konnte den client zu behandeln den Inhalt, als ob es excel. Was würde ich versuchen zu vermeiden ( wenn möglich ) zu tun, die round-trip zurück und nach vorne, weil der Inhalt möglicherweise große, bereits. Ich habe ausgewählt eine alternative, aber ich denke, ich werde verwenden Sie diese version für nicht ie-Browser.Danke für die Erklärung. Ich verstehe jetzt, dass, wenn das Dokument ist zu groß, es wäre eine Verschwendung von Zeit. Es ist zur Arbeit zu gehen, aber es ist nicht eine optimale Lösung. Noch benötigt wird für nicht ie-Browser, obwohl. Jetzt sind Sie gehen zu müssen, um erstellen Sie eine Bedingung, die in Ihrem js, "wenn nicht dh die server-Ansatz, sonst download excel". Viel Glück!
InformationsquelleAutor GmonC
Hier ist mein code zum speichern der generierten Inhalte[client-side] durch das JavaScript auf dem lokalen Laufwerk C: in MSWord[.doc] formatieren.
Ich arbeitete sich schnell auf die ur-Ausgabe und kam mit diesem Stück code. Hoffe, Verstand ich Ihr Problem richtig.
Den Constraints in meinem code sind
Diese angegangen werden müssen in den kommenden Versionen. (:
Frieden.
Gut zu wissen, dass ich in den richtigen Pfad. Ja, arbeite (.xls-format). Poste den code bald.
Bitte sehen Sie meine aktuelle code für das öffnen der erstellten Tabelle im xls-format hier: stackoverflow.com/questions/1479020/...
InformationsquelleAutor chong
Ist Ihre javascript-AJAX, die holt das Dokument.writeln() Inhalt aus dem server, oder sind Sie bereits generieren, dass die Inhalte, wenn die Seite an den Benutzer ? Denn wenn es ersteres ist, sehe ich keinen Grund, warum Sie kann nicht speichern Sie alle Variablen /Abfragen in der Sitzung der was server-side-Technologie, die Ihre mit-und dann generieren Sie einfach die plain-text-Zeug von denen. Ansonsten haben Sie zu folow voyager Vorschlag oben.
InformationsquelleAutor Alex Marshall
Da bist du mit Ext JS, haben Sie wahrscheinlich ein Store-Objekt, das Daten an das grid? Sie sollten in der Lage sein, um die Daten zu extrahieren, die Sie benötigen zu Fuß durch den laden, und formatieren Sie es, wie Sie wollen. Ich glaube nicht, dass Schaben die Daten aus der generierten HTML ist ideal.
Sobald Sie greifen die Daten, die Sie brauchen, aus dem Netz und formatieren Sie es in text, man könnte es auf das backend, die einen download initiieren (mit " Content-Disposition: attachment etc.)
Wenn sind Sie nicht besorgt, mit cross-browser, können Sie auch das data: URL-Schema, um einen download initiieren, ohne über das backend.
InformationsquelleAutor Ates Goral
Dieses plugin macht den job. Getestet auf IE, FF & Chrom.
https://github.com/dcneiner/Downloadify
InformationsquelleAutor Kareem