Pete: .location ändert sich bei write()

Hallo,

ich schreibe mittels

top.content.previewarea.document.close();
top.content.previewarea.document.open();top.content.previewarea.document.write(newContent);
top.content.previewarea.document.close();

von einem anderen Frame aus etwas in den Frame mit dem Namen previewarea.
newContent enthält dabei u.a. die Zeile

newContent += '<link type="text/css" href="./css/previewstyle.css" rel="stylesheet">'+'\n';

Vor dem schreiben wurde in der previewarea die Datei leer.html angezeigt. Von ihr aus gesehen stimmt auch der Pfad zur css-Datei. Wenn ich geschrieben habe hat sich aber die Seite geändert. Sie hat jetzt die aufrufende Seite zum Inhalt. Was also ablaufen muss, ist folgendes:

Der Browser (hier Firefox) lädt die aufrufende Seite in die previewarea und überschreibt dann den Inhalt.

Wie kann ich das ändern?

Pete

  1. Hallo Pete,

    ich schreibe mittels
    top.content.previewarea.document.close();

    top.content.previewarea.document.open();top.content.previewarea.document.write(newContent);

    top.content.previewarea.document.close();
    von einem anderen Frame aus etwas in den Frame mit dem Namen previewarea.

    Muss diese Ruecksicht auf Steinzeit-Browser wirklich sein? Viel eleganter ist es doch einfach, leer.html so zu beschreiben:

    if(document.getElementsByTagName)
      document.getElementsByName("body")[0].innerHTML = newContent;
    else if(document.all)
      document.all.tags("body")[0].innerHTML = newContent;

    Wobei du dann den HTML-Kopf mit <link> usw. in newContent gar nicht schreiben musst.

    viele Gruesse
      Stefan Muenz

    1. Muss diese Ruecksicht auf Steinzeit-Browser wirklich sein? Viel eleganter ist es doch einfach, leer.html so zu beschreiben:

      Es soll eine Anwendung für Schüler werden. Und in Schulen herrscht halt noch die Steinzeit: WIn98 und NS4.x bzw. IE4.x

      Gibt es sonst noch eine Variante?

      Pete

      1. Hallo Pete,

        Es soll eine Anwendung für Schüler werden. Und in Schulen herrscht halt noch die Steinzeit: WIn98 und NS4.x bzw. IE4.x

        Da kannst du zumindest schon mit div-Layern arbeiten, also:

        <head>
        <style type="text/css">
        #content {
          position:absolute;
          top:10px;
          left:10px;
        }
        </style>
        </head>

        <body>
        <div id="content">
        ...
        </div>
        </body>

        In JavaScript kannst du die Dreier-Fallunterscheidung (fuer alle Faelle) machen:
        if(document.getElementsByTagName)
          document.getElementsByName("body")[0].innerHTML = newContent;
        else if(document.all)
          document.all.tags("body")[0].innerHTML = newContent;
        else if(document.layers) {
          document.content.document.clear();
          document.content.document.open();
          document.content.document.write(newContent);
          document.content.document.close();
        }

        In allen Faellen wird nachtraeglich und dynamisch ("DHTML") nur der Seiteninhalt neu geschrieben, nicht aber die ganze Seite selbst, wie es bei einfachem document.write der Fall ist.

        viele Gruesse
          Stefan Muenz

        1. Coole Idee, auf die bin ich einfach nicht gekommen.
          Die divs können manchmal solche Probleme beim Positionieren machen (anderer Schriftgrad und alles fällt auseinander), dass ich versuche weitgehend ohne sie auszukommen.

          Dennoch Danke.

  2. top.content.previewarea.document.open();top.content.previewarea.document.write(newContent);

    top.content.previewarea.document.close();

    von einem anderen Frame aus etwas in den Frame mit dem Namen previewarea.
    newContent enthält dabei u.a. die Zeile

    newContent += '<link type="text/css" href="./css/previewstyle.css" rel="stylesheet">'+'\n';

    soweit hab ich das verstanden, aber das nachfolgende nicht mehr.

    Vor dem schreiben wurde in der previewarea die Datei leer.html angezeigt. Von ihr aus gesehen stimmt auch der Pfad zur css-Datei. Wenn ich geschrieben habe hat sich aber die Seite geändert. Sie hat jetzt die aufrufende Seite zum Inhalt. Was also ablaufen muss, ist folgendes:

    Du meinst du möchtest weiterhin die Seite leer.html angezeigt bekommen?
    das geht nicht, da du sie ja mit document.write überschreibst.

    Struppi.

    1. Du meinst du möchtest weiterhin die Seite leer.html angezeigt bekommen?
      das geht nicht, da du sie ja mit document.write überschreibst.

      Jein. Ich muss doch den Namen der Datei erhalten können. Mit document.write() ändere ich doch nur den Inhalt der Datei und nicht ihren Namen. Stattdessen habe ich auf einmal die aufrufende Datei als Namen.

      Ich kenne das sonst nur von window.open(). Wenn ich von einem Frame aus ein Fenster öffne, dann ist der window.opener das Frame und nicht die übergreifende frameset-Datei.

      Pete

      1. Du meinst du möchtest weiterhin die Seite leer.html angezeigt bekommen?
        das geht nicht, da du sie ja mit document.write überschreibst.

        Jein. Ich muss doch den Namen der Datei erhalten können. Mit document.write() ändere ich doch nur den Inhalt der Datei und nicht ihren Namen. Stattdessen habe ich auf einmal die aufrufende Datei als Namen.

        Was heißt als 'Namen'?

        Ich kenne das sonst nur von window.open(). Wenn ich von einem Frame aus ein Fenster öffne, dann ist der window.opener das Frame und nicht die übergreifende frameset-Datei.

        Was hat das miteinander zu tun.

        Irgendwie will mir nicht klar werden, was du willst und wo das Problem ist.

        Struppi.

        1. Was heißt als 'Namen'?

          Den Pfad der Datei. Ursprünglich wurde in dem Frame leer.html angezeigt. Dann schreibt der Frame config.html über document.write() ein neues dokument in den Frame in dem leer.html angzeigt wurde.
          Anstelle der ursprünglichen leer.html-Datei wird nun config.html mit
          mit dem neu geschriebenen Inhalt angezeigt. Genau das möchte ich aber nicht. Ich möchte die alte leer.html mit neuem Inhalt.

          Was hat das miteinander zu tun.

          Eigentlich nichts. Aber ich fand das genauso merkwürdig.

          Pete

          1. Was heißt als 'Namen'?

            Den Pfad der Datei. Ursprünglich wurde in dem Frame leer.html angezeigt. Dann schreibt der Frame config.html über document.write() ein neues dokument in den Frame in dem leer.html angzeigt wurde.
            Anstelle der ursprünglichen leer.html-Datei wird nun config.html mit
            mit dem neu geschriebenen Inhalt angezeigt. Genau das möchte ich aber nicht. Ich möchte die alte leer.html mit neuem Inhalt.

            Naja, es ist ja nicht mehr die Datei leer.html, du hast sie überschrieben aus der Datei config.html. Ich vermute mal das das der Grund ist. Du willst also den Inhalt _über_schreiben nicht neu beschreiben, insofern bleibt dir nur eine Lösung wie Stefan sie vorschlägt.

            Struppi.