matzebrock: Mit document.write() eine Seite ersetzen

Hallo zusammen.

Ist es irgendwie möglich mittels Javascript die gesamte eigene Seite zu überschreiben.

Also als Beispiel:
Ich rufe die index.html auf. Darin steht als einziges ein Script mit einem document.write("blabla"); Befehl. Wenn dieser nun ausgeführt wird, so wird das dann in ein Standard HTML/HEAD/BODY-Gerüst reingeparst. Genauer, es steht dann "blabla" im Body einer HTML Datei.
Was ich nun machen möchte ist, mittels Javascript die gesamte Seite zu ersetzen.
Sozusagen, dass "blabla" als Plaintext dort erscheint.

Bitte da um Hilfe :-)

Grüße und Danke!
Matze

  1. Lieber matzebrock,

    wenn Du die HTML-Struktur weitestgehend erhalten möchtest, dann wirst Du um die üblichen DOM-Methoden (z.B. http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_tag_name@title=getElementsByTagName()) nicht herumkommen. Mit document.write/document.writeln ersetzt Du den kompletten Dokumenteninhalt, inklusive des HTML-Elements und seines HEADs und BODYs.

    Du könntest Deinem Script natürlich auch beibringen, einen korrekten HTML-Code ins Dokument zu schreiben...

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber matzebrock,

      wenn Du die HTML-Struktur weitestgehend erhalten möchtest, dann wirst Du um die üblichen DOM-Methoden (z.B. http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_tag_name@title=getElementsByTagName()) nicht herumkommen. Mit document.write/document.writeln ersetzt Du den kompletten Dokumenteninhalt, inklusive des HTML-Elements und seines HEADs und BODYs.

      Du könntest Deinem Script natürlich auch beibringen, einen korrekten HTML-Code ins Dokument zu schreiben...

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      Hallo, danke für die schnelle Antwort.

      Nun, es geht gerade nicht darum die HTML Struktur zu erhalten. Genauer geht es darum, via HTML ein Script aufzurufen, welches aus sich selbst dann eine XML-File macht. Genau das via Document write. Das funktioniert aber nicht, da es automatisch in den body Bereich generiert wird.
      Es entsteht dann ein Konstrukt wie "<html><head></head><body><root><entry>bla</entry></root></body></html>" etc...
      Genau das möchte ich vermeiden.

      Übrigens ich nutze Firefox 3.0 unter Mac. Vllt liegts daran, kann ich mir aber nicht vorstellen.
      Könnte das jemand unter IE oder ähnliches bitte mal antesten?

      Vielen Dank an euch!
      Grüße
      Matze

      1. Hallo,

        probiers mal mit http://de.selfhtml.org/javascript/objekte/document.htm#open@title=document.open("application/xml"); vor und document.close(); nach dem write.

        Mathias

        1. Hallo,

          probiers mal mit http://de.selfhtml.org/javascript/objekte/document.htm#open@title=document.open("application/xml"); vor und document.close(); nach dem write.

          Mathias

          Hey Mathias.

          Leider kein Erfolg. Hast du mein Script zufällig mal getestet? Mich würde interessieren, ob es ein FF3/Mac Problem ist...

          Grüße
          Matze

          1. Hallo,

            Leider kein Erfolg.

            Dann unterstützt Firefox die MIME-Typ-Angabe nicht hinreichend.

            Wenn man mit window.open ein Fenster öffnet und es mit einem XML-Dokument beschreibt, zeigt Firefox es zumindest als text/plain an. Aber das hilft nicht weiter.

            Allerdings willst du offenbar gar kein XML-Dokument direkt anzeigen, sondern es soll letztlich wieder ein HTML-Dokument zu sehen sein infolge der XSL-Transformation, richtig? In dem Fall könntest du einfach die gesamte Transformation mit JavaScript anstoßen (geht zumindest im Firefox). Dann bekommst du einen HTML-String heraus und kannst diesen wie gewohnt mit innerHTML ins bestehende Dokument schreiben (oder du importierst die Knoten ins bestehende Dokument und hängst sie dort ein, dann sparst du dir die Serialisierung).

            XML-String in ein DOM parsen: http://www.xulplanet.com/references/objref/DOMParser.html
            XSL-Transformation: http://www.xulplanet.com/references/objref/XSLTProcessor.html
            Neues Dokument wieder serialisieren: http://www.xulplanet.com/references/objref/XMLSerializer.html

            http://developer.mozilla.org/en/docs/Parsing_and_serializing_XML
            http://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations

            Mathias

            1. Hallo,

              Leider kein Erfolg.

              Dann unterstützt Firefox die MIME-Typ-Angabe nicht hinreichend.

              Wenn man mit window.open ein Fenster öffnet und es mit einem XML-Dokument beschreibt, zeigt Firefox es zumindest als text/plain an. Aber das hilft nicht weiter.

              Allerdings willst du offenbar gar kein XML-Dokument direkt anzeigen, sondern es soll letztlich wieder ein HTML-Dokument zu sehen sein infolge der XSL-Transformation, richtig? In dem Fall könntest du einfach die gesamte Transformation mit JavaScript anstoßen (geht zumindest im Firefox). Dann bekommst du einen HTML-String heraus und kannst diesen wie gewohnt mit innerHTML ins bestehende Dokument schreiben (oder du importierst die Knoten ins bestehende Dokument und hängst sie dort ein, dann sparst du dir die Serialisierung).

              XML-String in ein DOM parsen: http://www.xulplanet.com/references/objref/DOMParser.html
              XSL-Transformation: http://www.xulplanet.com/references/objref/XSLTProcessor.html
              Neues Dokument wieder serialisieren: http://www.xulplanet.com/references/objref/XMLSerializer.html

              http://developer.mozilla.org/en/docs/Parsing_and_serializing_XML
              http://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations

              Mathias

              Hallo.

              Eigentlich würde ich das ganze als XML Dokument direkt deklarieren. Das Problem ist aber, dass ich in FF und IE6 gerne eine zweite XML Datei einbinden möchte (zB über entities, was in FF nicht geht, oder über XInclude, was in IE nicht geht). Also dachte ich mir, ich erzeuge das Dokument manuell und lade die zweite XML-File mittels JS rein, sodass ich ein zusammengefasstes Dokument dem XSL Parser übergebe. In der XSL sollen dann die XPath-Befehle ausgeführt werden, um denen es mir eigentlich geht.
              Mit PHP wäre das ganze kein Thema, aber zur Laufzeit scheint das nicht ganz so trivial zu sein.
              Letztendlich soll quasi eine Art "Anwendung" rauskommen, die als Datenbankbasis eine XML File hat die mit XPath in der XSL File ausgewertet wird. Da XSL nur die XMLs aus der ladenden Datei lesen kann ist es mir notwendig geworden die Datenbankbasis dort mit reinzuladen...

              Konfus, aber leider wahr :)
              Danke nochmals für alle Hilfe!

    2. Hier noch Code der index.html (mehr steht nicht drin):

        
      <script type="text/javascript">  
       var page_title = "DB";  
       var page_path = "./";  
       var page_name = "main";  
       var page_content = "<b>Fetter Text</b>";  
        
       var contents = "";  
        
       contents += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>";  
       contents += "<?xml-stylesheet type=\"text/xsl\" href=\""+page_path+"stylesheets/main.xsl\"?>";  
       contents += "<root>";  
       contents += " <page>";  
       contents += "  <title>"+page_title+"</title>";  
       contents += "  <path>"+page_path+"</path>";  
       contents += "  <name>"+page_name+"</name>";  
       contents += "  <content>";  
       contents += "   <![CDATA[";  
       contents += page_content;  
       contents += "   ]]>";  
       contents += "  </content>";  
       contents += " </page>";  
       contents += "</root>";  
        
       document.writeln(contents);  
        
      </script>  
        
      
      

      Vielleicht macht es mein Anliegen noch etwas deutlicher.

      1. Yerf!

        Hier noch Code der index.html (mehr steht nicht drin):

        Was passiert denn, wenn du das ganze in eine Funktion verpackst und diese in window.onload aufrufst?

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Jetzt siehts so aus:

          [code language="JavaScript"]
          <html>
           <head>
          <script type="text/javascript">
          function pla() {
           var page_title = "DB";
           var page_path = "./";
           var page_name = "main";
           var page_content = "<b>Fetter Text</b>";

          var contents = "";

          contents += "<?xml version="1.0" encoding="UTF-8" standalone="no"?>";
           contents += "<?xml-stylesheet type="text/xsl" href=""+page_path+"stylesheets/main.xsl"?>";
           contents += "<root>";
           contents += " <page>";
           contents += "  <title>"+page_title+"</title>";
           contents += "  <path>"+page_path+"</path>";
           contents += "  <name>"+page_name+"</name>";
           contents += "  <content>";
           contents += "   <![CDATA[";
           contents += page_content;
           contents += "   ]]>";
           contents += "  </content>";
           contents += " </page>";
           contents += "</root>";

          document.open("text/xml", "replace");
           document.write(contents);
           document.close();
          }
          </script>
          </head>
          <body onload="pla();"></body></html>
          [/code]

          Dadurch entsteht ein Dokument wie folgt:

          [code language="html"]
          <html><head></head><body><pre>&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;&lt;?xml-stylesheet type="text/xsl" href="./stylesheets/main.xsl"?&gt;&lt;root&gt; &lt;page&gt;  &lt;title&gt;DB&lt;/title&gt;  &lt;path&gt;./&lt;/path&gt;  &lt;name&gt;main&lt;/name&gt;  &lt;content&gt;   &lt;![CDATA[&lt;b&gt;Fetter Text&lt;/b&gt;   ]]&gt;  &lt;/content&gt; &lt;/page&gt;&lt;/root&gt;</pre></body></html>
          [/code]

          Also das XML escaped und zudem wieder in den Body geknallt. Warum werden überhaupt automatisch HTML-Tag rein geparst?
          Kann man das nicht irgendwie umgehen?

          Danke und Grüße
          matze