Gibt es das Serialisieren (also quasi DOM2text) als fertige Methode (oder Funktion)
XMLSerializer kennen verschiedene Browser.
Ich öffne ein neues Fenster und schreib den Kram da rein:
var Fenster = window.open(null,"SVG_saveme");
Fenster.document.write(DOM_string);
Im Prinzip ja, nur solltest du vorher noch <http://de.selfhtml.org/javascript/objekte/document.htm#open@title=open> und nachher <http://de.selfhtml.org/javascript/objekte/document.htm#close@title=close> aufrufen.
> In Chrome (Iron 8) muss ich ebenfalls PopUps erlauben
Du solltest Fenster immer nach Benutzereingaben öffnen, nicht automatisch. Dann hast du mit Popup-Blockern keine Probleme.
> Mit diesem PopUp kann ich gar nichts machen, ein Menü (also das Schraubenschlüssel-Icon) wird nicht angezeigt, im Kontextmenü ist nichts nützliches zu finden und wenn ich Strg+S drücke passiert gar nichts.
Wenn du window.open mit nur zwei Parametern öffnest, sollte Chrome ein einfachen Tab öffnen.
> Mit Chrome habe ich noch ein Nebenproblem, welches ich unten anspreche (oder in einem zweiten Beitrag, mal gucken), Opera und Safari hab ich noch nicht getestet.
>
> Zweiter Ansatz: Einmal Server und zurück:
Auch sehr gut und vielleicht sogar besser, weil document.open/write/close von HTML ausgeht. Man kann zwar theoretisch einen MIME-Type als open-Parameter angeben, aber das unterstützt meines Wissens kein Browser wie gewünscht.
> ~~~php
<?php
> header('Content-type: image/svg+xml');
> echo ($_POST['svg_string']);
> ?>
Da wäre meine erste Frage: Sieht da jemand ein Sicherheitsproblem? Muss ich was maskieren oder demaskieren?
Das ist möglicherweise reflected XSS. Du solltest prüfen, ob das wirklich korrektes SVG ist, sowie Scripte filter. Das wird u.U. schwierig. Oder du verlagerst das auf eine separate Domain, wo es keine Cookie-Authentifizierung oder sonst irgendwelche privaten Daten abzugreifen gibt.
Demaskieren musst du, wenn dein PHP-Interpreter da magic quotes anwendet.
Und die andere: Wie kriege ich denn eigentlich so einen POST-Request, aus Javascript an den Server abgesetzt, so dass ich eben als Antwort ein neues Fenster mit der Antwort erhalte.
Indem du ein POST-Formular baust und es via JavaScript (oder einen herkömmlichen Button) absendest. Ob das in SVG geht, weiß ich nicht.
Muss ich vielleicht den XHTML-Namensraum einbinden, dann ein Formular erstellen, dort meinen DOM-String reinkippen um dieses Formular dann abzuschicken?
Wenn das nötig ist, weil es in SVG nichts entsprechendes gibt: Ja.
Andererseits könntest du das SVG-Dokument auch einfach in ein (X)HTML-Dokument einbinden, notfalls als iframe.
Erscheint mir sehr aufwendig, aber wenn es sein muss... was muss ich da beim Escaping beachten?
Nichts, das erledigt der Browser.
Mathias