Seb: Fenster offen lassen aber inhalt ersetzen

Habe ein Onlineshop mit JavaScript aufgebaut. Nun besteht das Problem, dass das Fenster immer die Eingaben nicht ersetzt sondern neu darunter legt.

Hier die Funktionsfolge:

f.open("about:blank","","...weitere Angaben...")
f.document.write(Echo);
// in Echo steht der String (eine 10-Spaltige Tabelle)

Nun möchte ich aber, dass ich nicht immer das Fenster mit f.close() schließen muss, damit die Angaben nicht doppelt darin stehen. Ist es möglich über ein Element den Ihnalt immer wieder auszutauschen?

Ich habe es mit f.document.getElementById("inhalt").innerHTML versucht, aber da kommt sofort eine Fehlermeldung.

Kann mir bitte Jemand helfen!

MFG
Griever

  1. Hier die Funktionsfolge:

    f.open("about:blank","","...weitere Angaben...")

    about:blank ist nicht gut. Das Führt dazu dass du nicht mehr mit JS auf das Fenster zugreifen kann (nicht verschwiegen werden soll aber, das ohne eine Angabe der IE 3 einen Fehler erzeugt)

    Nun möchte ich aber, dass ich nicht immer das Fenster mit f.close() schließen muss, damit die Angaben nicht doppelt darin stehen. Ist es möglich über ein Element den Ihnalt immer wieder auszutauschen?

    Ich habe es mit f.document.getElementById("inhalt").innerHTML versucht, aber da kommt sofort eine Fehlermeldung.

    Wenn du einen Fensternamen angibst kannst du den Inhalt immer wieder mit open ersetzen, ohne das ein neues geöffnet wird, du musst dann aber immer den focus() setzen.

    Struppi.

    1. Nein. Ich möchte keine URL öffnen. Der Inhalt wird immer Dynamisch von dem Hauptscript (Auf der Indexseite) generiert. Nun habe ich es erstmal so gemacht, dass das Fenster geöffnet wird und dann der Inhalt eingefügt wird (mit f.document.write(Echo))

      Aber wenn dann etwas neues dazu kommt, wird es einfach darunter gesetzt. Mit dem, was schon darin steht.

      z. B.

      Fenster
      ----------------------------------------------------------------
      Zeile 1
      Zeile 2
      Zeile 3

      Nun kommt Zeile 4 hinzu
      ----------------------------------------------------------------
      Zeile 1     Er wiederholt einfach die Angaben
      Zeile 2     Daher musste ich das Fenster stets schließen,
      Zeile 3     damit der Inhalt immer stimmt
      Zeile 1     Verstehst du jetzt mein Problem?
      Zeile 2
      Zeile 3     Ich möchte einfach den Inhalt dynamisch
      Zeile 4     mit einer Funktion austauschen, aber das
                  Fenster offen lassen.

      Muss ich da jetzt irgend ein Child erstellen wo ich dann extern darauf Zugreifen kann?

      MFG
      Griever

  2. moin Seb :)

    Dein Problem wäre eventuell (wenn ich es richtig verstanden habe) mit appendChild lösbar.

    Erstelle dir einfach mit den create-Methoden des documents deine Tabelle und füge diese mit append ein nachdem du den vorherigen Inhhalt mit removeChild gelöscht hast.

    liebe Grüße aus Berlin
    lina-

    --
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. Danke für den Tip. Ich werds versuchen.

      Grüße zurück aus Stendal und Gotha

      Griever

    2. Hi, lina-.

      Ich glaube ich habe eine vorzeitige Lösung für das Problem. Ich habe jetzt eine leere seite (leer.htm) erstellt und von dem Fenster laden lassen.

      Danach habe ich folgenden Ablauf durchgehen lassen:

      if(!f||f.closed==true)
      f=window.open("leer.htm","ausgabefenster","...werte...")
      else
      f.location.href="leer.htm"
      setTimeout("f.document.write(*""++"*")",200)

      // * = Backslash (find ich am Macintosh-Pc nicht)

      Die 1/5 Sekunde dient dazu, um evtl eine längere Ladezeit und damit einen Fehler zu überbrücken.

      Nun. Vielleicht hast du ein Verbesserungsvorschlag. Wenn ja, nur keine Hemmungen. Bin für alles offen.

      (Großes Projekt namens www.artsalat.de welches über ein Kunstshop handelt. Die Fensterfunktion dient zum Anzeigen des Warenkorben aus einer mehrdimensionalen Array-Variable namens "Corb" und wird durch eine Schleife in eine ordentliche Tabelle in die Variable "Echo" sortiert und weitergegeben an das "Fenster-Script", wie ich es jetzt erstmal nenne. Ratschläge und Vorschläge immer gern gesehen. Jedoch ohne PHP (Nur beim Versandt!))

      MFG
      Griever

      1. Ich glaube ich habe eine vorzeitige Lösung für das Problem. Ich habe jetzt eine leere seite (leer.htm) erstellt und von dem Fenster laden lassen.

        Brauchst du nicht, du kannst die url komplett leer lassen (wenn dich nicht der IE 3 noch interessiert) und diese leere Seite (nicht HTML Seite) mit document.write() beschreiben.

        Danach habe ich folgenden Ablauf durchgehen lassen:

        if(!f||f.closed==true)
        f=window.open("leer.htm","ausgabefenster","...werte...")
        else
        f.location.href="leer.htm"

        wie gesagt hier reicht:

        if(!f || f.closed ) f=window.open("","ausgabefenster","...werte...");  
        else  
        f.focus();  
        ...  
        
        

        setTimeout("f.document.write(*""++"*")",200)

        // * = Backslash (find ich am Macintosh-Pc nicht)

        ist aber auch nicht nötig:
        setTimeout("f.document.write('++')",200)

        allerdings musst du das Dokument nach dem beschreiben schliessen und wenn du den vorherigen Inhalt löschen möchtest auch öffnen:

          
        f.document.open();  
        f.document.write('++');  
        f.document.close();  
        
        

        Solltest du den IE als browser benutzen wäre es jetzt an der Zeit Firefox o.ä. zu installieren, um Javaskripte zu entwickeln sind IE denkbar ungeeignet. Da sie einerseits kaum aussagekräftige Fehlermeldungen produzieren anderseits viele Fehler ignorieren, was dazu führt dass dein skript NUR auf dem IE läuft.

        Struppi.

        1. Nein. Ich möchte ja, dass ich vielleicht auf einen Container in dem Fenster zugriff habe und diesen Ihnalt ersetzen kann. Von der Hauptseite (opener) aus. Aber da steht dann: Zugriff verweigert.

          Ich hab dann erst gedacht, dass er die Seite nicht vollständig geladen hat und dann das Oblekt nicht findet.

          Nun. Das war es dann auch nicht, als ich es nachprüfen lassen habe.

          Kann ich denn nicht mit Javascript auf ein Objekt im Fenster zugreifen?

          z. B.:

            
          var f = window.open("","","")           // einfach ein Fenster  
          f.document.write("<div id='derlayer'>") // Der Container  
          // Und jetzt dachte ich, dass ich auf diesen Container, der "derlayer" heißt, zugreifen kann. Doch bei  
          f.document.getElementById("derlayer").innerHTML ="Neuer Inhalt<br>Mit Zeilenumbruch"  
          // spuckt der mir gleich einen Fehler aus.  
          // Fehler:  
          // Zugriff verweigert  
          // Unbekannte Anwendung  
          // Hatte sowas noch nie. Aber es steht nichtmal in der Hilfe.  
          
          

          Firefox habe ich, doch da weiß ich nicht, wie ich JavaScript aktivieren soll. Der blockt nämlich alles und gibt mir nichtmal eine Meldung.
          Aber ich kenn die Scriptunterstützung von Firefox und bau schon damit automatisch. Doch erstmal will ich das auf IE zum laufen kriegen, danach werde ich dies zu Firefox konvertieren.

          MFG
          Griever

          1. Nein. Ich möchte ja, dass ich vielleicht auf einen Container in dem Fenster zugriff habe und diesen Ihnalt ersetzen kann. Von der Hauptseite (opener) aus. Aber da steht dann: Zugriff verweigert.

            opener ist das Fenster das ein anderes geöffnet hat und nicht das öffnende Fenster.

            Ich hab dann erst gedacht, dass er die Seite nicht vollständig geladen hat und dann das Oblekt nicht findet.

            Ein Objekt ja -  aber du hast in dem letzten Posting die Seite "leer.htm" geladen und für mich klingt es als ob diese Seite leer ist und nur als Platzhalter dient.

            Kann ich denn nicht mit Javascript auf ein Objekt im Fenster zugreifen?

            sicher.

            z. B.:
            [code lang=javascript]
            var f = window.open("","","")           // einfach ein Fenster
            f.document.write("<div id='derlayer'>") // Der Container
            // Und jetzt dachte ich, dass ich auf diesen Container, der "derlayer" heißt, zugreifen kann. Doch bei
            f.document.getElementById("derlayer").innerHTML ="Neuer Inhalt<br>Mit Zeilenumbruch"

            Also erstmal, les dir mal das durch http://de.selfhtml.org/javascript/objekte/node.htm
            Das sollte eigentlich der IE 5 können. Damit kannst du einfacher als mit doucment.write Elemente erzeugen.

            // spuckt der mir gleich einen Fehler aus.
            // Fehler:
            // Zugriff verweigert
            // Unbekannte Anwendung
            // Hatte sowas noch nie. Aber es steht nichtmal in der Hilfe.

            Ich vermute, dass die Zeit zwischen document.write() und getElementById() zu kurz ist.

            Firefox habe ich, doch da weiß ich nicht, wie ich JavaScript aktivieren soll. Der blockt nämlich alles und gibt mir nichtmal eine Meldung.

            du weisst was ein Menü ist?
            Dort sollte, wenn du die deutsche Version hast, >Extras< stehen, in diesem dann >Einstellungen< und wenn du dort auf die >Web-Features< klickst, ist das Kästchen für JS sichtbar.

            Aber vermutlich suchst du eher die JS Konsole, guck dir mal das Menü von Extras genauer an. Die JS Konsole zeigt dir Fehler und Warnungen sehr genau an und du kannst oft sogar auf die Meldung klicken und siehst sofort die Stelle die falsch ist.

            Aber ich kenn die Scriptunterstützung von Firefox und bau schon damit automatisch. Doch erstmal will ich das auf IE zum laufen kriegen, danach werde ich dies zu Firefox konvertieren.

            Das ist quatsch. So als ob du sagen würdest: ich bau erstmal einen Feldweg für meinen Trekker, wenn der fertig ist mach ich eine Autobahn daraus für die anderen Autos.

            Es ist einfacher für Firefox ein Skript zu entwickeln als für den IE (zumindest wenn es über 2-3 Zeilen hinausgehen soll.

            Struppi.

            1. Naja. Ich schau mal rein. Vielleicht krieg ichs ja hin.

              Danke.

              PS: Ich sitze an einem Macintosh, wie öffnet man da ein neues Fenster durch klick auf einen Link???

              MFG
              Griever

              1. PS: Ich sitze an einem Macintosh, wie öffnet man da ein neues Fenster durch klick auf einen Link???

                Normalerweise unter windows durch [SHIFT]-klick

                Struppi.

            2. moin Struppi :)

              Nein. Ich möchte ja, dass ich vielleicht auf einen Container in dem Fenster zugriff habe und diesen Ihnalt ersetzen kann. Von der Hauptseite (opener) aus. Aber da steht dann: Zugriff verweigert.

              opener ist das Fenster das ein anderes geöffnet hat und nicht das öffnende Fenster.

              wo ist denn da der Unterschied? *pingelig sei*

              Aber ich kenn die Scriptunterstützung von Firefox und bau schon damit automatisch. Doch erstmal will ich das auf IE zum laufen kriegen, danach werde ich dies zu Firefox konvertieren.

              Das ist quatsch. So als ob du sagen würdest: ich bau erstmal einen Feldweg für meinen Trekker, wenn der fertig ist mach ich eine Autobahn daraus für die anderen Autos.

              Grundsätzlich stimme ich dir zu, aber der Vergleich hinkt, da Traktoren nicht auf Autobahnen fahren dürfen ;)
              Ergo hast du im zweiten Ausbauschritt eine Autobahn auf der die tollen Autos fahren (können) aber dein doofer Trekker muss dennoch stehenbleiben (oder über einen extra-Feldweg tuckern)... Das kommt der Realität recht nahe (ich habe da was mit "to cool for IE" im Kopf) - aber der Idealzustand ist das nicht.

              liebe Grüße aus Berlin
              lina-

              --
              Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
              1. Nein. Ich möchte ja, dass ich vielleicht auf einen Container in dem Fenster zugriff habe und diesen Ihnalt ersetzen kann. Von der Hauptseite (opener) aus. Aber da steht dann: Zugriff verweigert.

                opener ist das Fenster das ein anderes geöffnet hat und nicht das öffnende Fenster.

                wo ist denn da der Unterschied? *pingelig sei*

                Das öffnende ist das das window.open() aufruft.
                Das geöffnete ist das das durch woindow.open() geöffnet wird.

                Das ist quatsch. So als ob du sagen würdest: ich bau erstmal einen Feldweg für meinen Trekker, wenn der fertig ist mach ich eine Autobahn daraus für die anderen Autos.

                Grundsätzlich stimme ich dir zu, aber der Vergleich hinkt, da Traktoren nicht auf Autobahnen fahren dürfen ;)

                Sollte man beim IE auch machen, aber leider ist die Firma die die Trekker baut sehr mächtig und deshalb dürfen sogar die Trekker auf die Autobahn. Die Macht der mächtigen halt ;-)

                Ergo hast du im zweiten Ausbauschritt eine Autobahn auf der die tollen Autos fahren (können) aber dein doofer Trekker muss dennoch stehenbleiben (oder über einen extra-Feldweg tuckern)... Das kommt der Realität recht nahe (ich habe da was mit "to cool for IE" im Kopf) - aber der Idealzustand ist das nicht.

                Jaja, Vergleiche hinken fast immer ;-)

                Struppi.

                1. moin Struppi :)

                  opener ist das Fenster das ein anderes geöffnet hat und nicht das öffnende Fenster.

                  wo ist denn da der Unterschied? *pingelig sei*

                  Das öffnende ist das das window.open() aufruft.
                  Das geöffnete ist das das durch woindow.open() geöffnet wird.

                  Das ist schon klar... ich sehe nur keinen Unterschied, zwischen einem Fenster, das ein Fenster öffnet und einem _öffnenden_ Fenster (im Gegensatz zu einem _ge_öffneten Fenster) ;)

                  liebe Grüße aus Berlin
                  lina-

                  --
                  Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                  1. opener ist das Fenster das ein anderes geöffnet hat und nicht das öffnende Fenster.

                    wo ist denn da der Unterschied? *pingelig sei*

                    Das öffnende ist das das window.open() aufruft.
                    Das geöffnete ist das das durch woindow.open() geöffnet wird.

                    Das ist schon klar... ich sehe nur keinen Unterschied, zwischen einem Fenster, das ein Fenster öffnet und einem _öffnenden_ Fenster (im Gegensatz zu einem _ge_öffneten Fenster) ;)

                    Es hat gedauert, aber jetzt hab ich's gerafft.

                    Also, es muss heißen:
                    opener ist das Fenster das ein anderes geöffnet hat und nicht das _ge_öffnete Fenster.

                    Danke ;-)

                    Struppi.