Axel Pawellek: Dynamisch erzeugtes Dokument inkl. Script mit NS lokal speichern

Ich will ein mit JavaScript (d.h. document.write) dynamisch erzeugtes Dokument lokal speichern und in dieses Dokument wiederum ein JavaScript einbinden (welches erst beim Aufrufen der lokal gespeicherten Seite von Bedeutung ist). Dabei gibt es leider einige Probleme:

1. Zum Speichern des Dokuments kann man beim IE die Methode document.execCommand("SaveAs") benutzen, wie ich in diesem Thread erfahren habe: http://forum.de.selfhtml.org/archiv/2002/4/10799/
Gibt es eine ähnliche Methode auch beim NN (sowohl 4.x wie 6.x)?
(Notfalls könnte man das Speichern natürlich auch voll manuell über die Menuleiste vornehmen lassen.)

2. Ein größeres Problem kommt nun zu Tage, wenn man sich das aus dem NN heraus gespeicherte HTML-Dokument ansieht - oder einfach "Seitenquelle ansehen" / "Quelltext anzeigen" im (Kontext-)Menü der dynamisch erzeugten Seite wählt:

2.1. Beim NN 4.x erhält man einen WYSIWYG-Code, in dem die Script-Bereiche fehlen. (Wahrscheinlich, weil die Scripten direkt beim Aufbau der Seite ausgeführt werden und nicht noch extra in den WYSIWYG-Code geschrieben werden.) Kann man das verhindern? (Notfalls müßte ich wohl das Script "auslagern".)

2.2. Beim NN 6.2 erhält man schlicht und einfach folgendes:
   <html><body></body></html>
(Wahrscheinlich, weil das Fenster des dynamisch erzeugten Dokuments mit window.open("about:blank") geöffnet wird.) Das finde ich nun extrem ärgerlich, weil mir hier natürlich gar keine Notlösung mehr einfällt. Was kann man dagegen machen?

  1. Hallo,

    grundsätzlich gibt es bei JavaScript eine Sicherheitsbeschränkung mit UniversalBrowserRead und UniversalBrowserWrite bei den Netscape-Browsern  bis 5.0 (beim NS6 glaube ich auch, bin mir aber nicht sicher.)
    Eben aus Sicherheitsgründen ist das Speichern von Dokumenten untersagt.
    Deswegen haben auch Outlook und IE-User immer diese Virenanfälligkeit und vor allem können sich Hacker solche Scripte zunutze machen.
    Zum Zwischenspeichern sind daher nur Cookies vorgesehen.
    Beim Netscape4 gibt es zwar die Möglichkeit des JavaStreamings, davon ist aber abzuraten.
    Desweiteren erweist sich execCommand als sehr gefährlich, weil AusnahmeSchutzverletzungen hier häufig auftreten.

    Es ist auch der Beschreibung auch nicht ersichtlich, warum nicht im Cookie gespeichert wird.
    Beim NS6 kann man den Quellcode nicht lesen, wenn er mit document.write geschrieben oder dynamisch verändert wurde z.B. mit innerHTML. Es muss in jedem Fall das komplette HTML-File geschrieben werden. Beispiel:

    function fenster(betyp){

    vschirm = screen.width;
            schirm = vschirm*0.977;
            aufl ="800x600/be_fl_";
            erw ="-400.png'>";
            verzeichnis ="<img align=middle src = '../../../assets/images/";
            ausgabe = verzeichnis + aufl + betyp +erw;
            hohe = screen.width*0.586;
            groesse="toolbar=no,location=no,directories=no,status=no,scrollbars=yes,menubar=no,resizable=yes,width="+schirm+",height="+hohe;
            bildanz = window.open("","fenster",groesse);
            bildanz.moveTo ((screen.width-schirm)/2,(hohe/10));
            moveTo(10,10);

    if (vschirm <= 640){ausgabe = verzeichnis + aufl + betyp + erw;}
            if (vschirm > 640 && vschirm < 1023 ){ausgabe = verzeichnis + aufl + betyp + erw;}
            if (vschirm >= 1024 && vschirm <= 1199){aufl = "1024x768/be_fl_"; ausgabe = verzeichnis + aufl + betyp + erw;}
            if (vschirm >=1200 && vschirm <= 1599){aufl = "1200x/be_fl_";ausgabe = verzeichnis + aufl + betyp + erw ;}
            if (vschirm >=1600){aufl = "1600x/be_fl_";ausgabe = verzeichnis + aufl + betyp + erw;}

    bildanz.document.clear();
                  bildanz.document.open();
                  bildanz.document.write("<HTML>");
                  bildanz.document.write("<HEAD><title>BewamatViewer</title>");

    bildanz.document.write('<scr'+'ipt language="JavaScript">');
                  bildanz.document.write('closebut1 = new Image(232,29);closebut1.src="../../../assets/images/153Fensterzu.gif";closebut2 = new Image(232,29);closebut2.src="../../../assets/images/hell153Fensterzu.gif";closebut3 = new Image(232,29);closebut3.src="../../../assets/images/Click153Fensterzu.gif";</Scr'+'ipt>')
                  bildanz.document.write("</Head>");

    bildanz.document.write("<BODY BGCOLOR=#FFFFFF  TEXT=#000000 ><DIV>")

    bildanz.document.write("<center>"+ausgabe+"</center></DIV>")
                  bildanz.document.write('<div><center>')
                  bildanz.document.write('<img src="../../../assets/images/153Fensterzu.gif" align=middle usemap="#closeroll" width="232" height="30" border="0" alt="" name="closebut" onmouseout="document.closebut.src=closebut1.src"></DIV>')
                  bildanz.document.write('<map name="closeroll"><area shape=rect coords="1,1,200,28" href="JavaScript:void(0)" onfocus="blur()" onclick="self .close();window.close();close();top.window.close()" onmouseover="document.closebut.src=closebut2.src" onmousedown="document.closebut.src=closebut3.src" onmouseout="document.closebut.src=closebut1.src"></map>');
                  bildanz.document.write("</center></Body></HTML>")
                  bildanz.document.write("")

    bildanz.document.close();

    return true;
    }

    Gruss

    Michael

    1. Hallo Michael!

      Danke für Deine Hinweise. Ich werde es mal ausprobieren. Aber eigentlich schreibe ich ja bereits mit document.write das ganze HTML-Dokument incl. aller Tags in ein leeres Fenster. Ich werde mir Dein Script mal näher anschauen.

      Warum ich nicht in Cookies speichere? Ich schreibe ein Script, mit dem man Notizen zu HTML-Seiten machen kann, und speichere diese ja auch in den Cookies. Wegen der Möglichkeit des Datenverlusts und der Unmöglichkeit, die Daten zwischen Arbeitsplätzen bzw. Browsern komfortabel zu transportieren, suche ich irgendeinen anwenderfreundlichen Weg, lokal Sicherheitskopien dieser Daten anzufertigen. Der Anwender soll eine HTML-Seite manuell speichern können und beim Aufruf dieser Seite von der Festplatte soll ein integriertes Skript die Daten wieder in die Cookies setzen. Klingt abenteuerlich, ich weiß.

      Schönen Tag,
      Axel