NCMasta: Neue Seite nur aus Code generieren

Hallo =)

gäbe es eine Möglichkeit, eine neue Seite per JS aufzurufen ohne eine existierende Datei?
Z.B ich rufe mit einem Button/Link eine neue Seite auf, evtl mit window.open(), gebe aber keinen Verweis an, sondern generiere den Quelltext der neuen Seite rein mit JavaScript, a la

var neueSeite = (document.write('<html><head></head><body><div >' + inhaltsvariable + '</div></body></html>'););
(Soll jetzt nur als Veranschaulichung dienen ^^ )

Ich habe etwas gesehen, was ich aber nicht so ganz verstanden habe - Dort ging es um ein Frameset, dessen SRC nicht mit einem Verweis bestimmt wurde sondern mit
... src="javascript.write();"...

Ist das sowas ähnliches?

Ich hoffe ihr könnt mir helfen =)

  1. Lieber NCMasta,

    gäbe es eine Möglichkeit, eine neue Seite per JS aufzurufen ohne eine existierende Datei?

    nein. Du kannst aber ein neues Dokument mittels JavaScript generieren und in das DOM des Browsers schreiben. Für den Besucher ist es im Grunde eine neue Seite, der Besucher kann (wahrscheinlich, das müsste man prüfen) sogar mit dem Back-Button seines Browsers zum vorherigen Dokument zurück navigieren.

    Für diesen Zweck gibt es http://de.selfhtml.org/javascript/objekte/document.htm#open@title=document.open() und http://de.selfhtml.org/javascript/objekte/document.htm#write@title=document.write().

    Z.B ich rufe mit einem Button/Link eine neue Seite auf, evtl mit window.open(), gebe aber keinen Verweis an, sondern generiere den Quelltext der neuen Seite rein mit JavaScript, a la

    var neueSeite = (document.write('<html><head></head><body><div >' + inhaltsvariable + '</div></body></html>'););

    Dein Code ist insofern Murks, als dass Du das Klammernpaar um den Methodenaufruf "document.write" nicht benötigst, dieser sogar eher neue Probleme schafft (was genau soll document.write zurückliefern, das Du in einen Boolschen Wert konvertiert in der Variablen "neueSeite" abspeichern willst?) denn echten Nutzen bietet.

    Davon abgesehen ist window.open nicht das, was Du suchst (oder willst Du ein neues Browserfenster öffnen?).

    Ich habe etwas gesehen, was ich aber nicht so ganz verstanden habe - Dort ging es um ein Frameset, dessen SRC nicht mit einem Verweis bestimmt wurde sondern mit
    ... src="javascript.write();"...

    Du kannst die Quelle eines Frames mittels JavaScript neu bestimmen, falls Dein JavaScript in einem Dokument steht, welches von derselben Domain wie der Inhalt des Frames geladen wurde (dieses Sicherheitsfeature nennt man "Same Origin Policy").

    Ist das sowas ähnliches?

    Nein, Dein Beispielcode ist absoluter Murks.

    Ich hoffe ihr könnt mir helfen =)

    Naja, was ist denn wirklich Hilfe für Dich? Du hast ja nicht erklärt, warum Du unbedingt JS-gesteuert vorgehen willst. Daher will ich Dir auch keinen Code vorkauen. Wesentliche Hinweise hast Du ja nun bekommen.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Ok, danke für die schnelle Antwort =)

      Naja, was ich machen will. Einige meiner User müssen ein HTML-Dokument speichern können, das muss aber ohne Server laufen, sondern rein über den Client (PHP, Perl, usw fallen flach) aber bevor Sie dies tun werden viele Variablen gesetzt (Leider viel mehr als IE in der URL erlaubt, GET fällt also auch weg, POST ja eh durch das Fehlen von PHP o.ä.) - ich brauche also eine Seite die sich speichern lässt (Seite Speichern unter) aber schon mit den vorher eingetragenen Variablen (per INPUT-Feld). Daher dachte ich mir ich lasse die Variablen über ne Form neu definieren und setze einen Button der eine neue Seite generiert, die die aktuellen Variablen beinhaltet und die USER können das ganze durch Speichern unter im Browser auf ihre HDD speichern, also die komplette Seite ^^ einfach auf die Festplatte schreiben, wie mit PHP, kann man mit JS ja nicht. "local.storage" funzt aucht nicht, da die Seite, über ein Netzwerk verfügbar sein muss (Der User speichert es sich, und andere im Netzwerk können auch darauf zugreifen)

      Greetings

      1. Lieber NCMasta,

        Du willst also im Grunde Webserver-Funktionalität ohne Webserver machen. Warum? Was hindert Dich an der Installation eines Webservers?

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Eben das Netzwerk. Ohne das geht es nicht, leider bin ich aber nicht Admin von eben diesem. ^^ Ich könnte zwar auf einem der Client-PCs Xampp einrichten, aber das Netzwerk läuft bei uns über Phion (glaub so heisst es, ein Proxyserver, womit alle PCs auf das Netzwerk zugreifen können, was auch nur einfache Ordner sind, für jeden PC ein Ordner und auf das Intranet-Portal, eine Website mit ein paar Infos, aufs Internet kommt man nur mit PW was aber nur wenige haben)

          Somit bin ich, sofern Du nichts anderes weisst, auf Clientseitige Sprachen angewiesen, wobei, PHP wäre mir natürlich viel lieber =D Es würde alles so viel einfacher machen *seufz* Mit PHP kann ich zumindest einigermaßen gut umgehen, bei JS bin ich wirklich noch blutiger Anfänger...

          Greetings

          1. OK bin dann nach langem suchen doch fündig geworden, es geht wie mein Lösungsansatz gedacht war =)

            var uriContent = "<html><head></head><body>Hallooooo</body></html>";  
            var win = window.open();  
            win.document.open();  
            win.document.write(uriContent);
            

            Damit erzeugt man eine leere Seite die mit der Variablen uriContent beschrieben wird. Im Quelltext steht dann nurnoch
            <html><head></head><body>Hallooooo</body></html>

            Trotzdem danke für die Mühe =)

            Greetings

      2. Daher dachte ich mir ich lasse die Variablen über ne Form neu definieren und setze einen Button der eine neue Seite generiert, die die aktuellen Variablen beinhaltet und die USER können das ganze durch Speichern unter im Browser auf ihre HDD speichern

        Das geht mit einer data:-URL. In der englischen Wikipedia findest du ein Beispiel, das genau dein Ansinnen umsetzt:

        window.open('data:text/html;charset=utf-8,' +
            encodeURIComponent( // Escape for URL formatting
                '<!DOCTYPE html>'+
                '<html lang="en">'+
                '<head><title>Embedded Window</title></head>'+
                '<body><h1>42</h1></body>'+
                '</html>'
            )
        );

        In diesem Fall wird ein neues Fenster geöffnet, aber data:-URLs funktionieren grundsätzlich überall, wo URLs angegeben werden können. <a href="data:text/html;charset=utf-8,%3C!DOCTYPE%20html%3E%3Chtml%20lang%3D%22en%22%3E%3Chead%3E%3Ctitle%3EEmbedded%20Window%3C%2Ftitle%3E%3C%2Fhead%3E%3Cbody%3E%3Ch1%3E42%3C%2Fh1%3E%3C%2Fbody%3E%3C%2Fhtml%3E"> täte es auch (hier als Beispiel mal ohne Javascript), ebenso document.location.

        Beachte aber den Hinweis bezüglich der veralteten IEs. Inwieweit die Einschränkungen für die aktuelle Ausgabe gelten, ist mir nicht bekannt. Versuch macht kluch.

        "local.storage" funzt aucht nicht, da die Seite, über ein Netzwerk verfügbar sein muss (Der User speichert es sich, und andere im Netzwerk können auch darauf zugreifen)

        Habe ich das richtig verstanden, andere können auf die Festplatte des Seitenbenutzers zugreifen? Das kommt mir ein wenig "igitt" vor und auch ein wenig merkwürdig, denn für einen sicheren Server ist in deiner Konstellation kein Platz, wohl aber dafür, das irgendwer auf meinem Rechner rumdödelt.
        Es mag in deinem ganz speziellen Anwendungsfall ok sein, aber von außen betrachtet kann ich da nur die Stirn runzeln.