Ralf: Daten in neuem Fenster erfassen

Hallo,

ich möchte per Javascript in einem Popup Daten erfassen und die Werte zurückerhalten.
Da ich aber (in diesem speziellen Fall) keine Möglichkeit habe, eine bestimmte Datei aufzurufen, wollte ich ein leeres Fenster öffnen und dort HTML einfügen. Das funktioniert auch noch und ich kann dort ein <form> anzeigen und Daten eingeben.

Aber wie bekomme ich die Daten wieder ins aufrufende Script zur weiteren Verarbeitung? Leider kann ich in das leere Fenster keine <script> Anweisungen einfügen.

Ralf

  1. Hallo,

    Da ich aber (in diesem speziellen Fall) keine Möglichkeit habe, eine bestimmte Datei aufzurufen, wollte ich ein leeres Fenster öffnen und dort HTML einfügen. Das funktioniert auch noch und ich kann dort ein <form> anzeigen und Daten eingeben.

    Aber wie bekomme ich die Daten wieder ins aufrufende Script zur weiteren Verarbeitung?

    Über das Objekt opener kannst du auf das window-Objekt des Fensters zugreifen, das das Popup-Fenster geöffnet wird.
    Notierst du z.B. opener.variable = "wert";, kannst du im Ursprungsdokument eine (String-)Variable mit dem Namen »variable« setzen und sie hat den Wert "wert". Genauso funktioniert das Aufrufen von Funktionen im Ursprungsdokument.

    Leider kann ich in das leere Fenster keine <script> Anweisungen einfügen.

    Warum nicht? Zum Beispiel:

      
    <html>  
    <head>  
    <script type="text/javascript">  
    function zeige () {  
     document.getElementById("a").firstChild.data = bla;  
    }  
    var neuesfenster;  
    function oeffne () {  
     neuesfenster = window.open('', 'neuesfenster');  
     neuesfenster.document.open();  
     neuesfenster.document.write("<html><head><title>bla<\/title><script type='text/javascript'> function sende (form) { opener.bla = form.elements.bla.value; } <\/script><\/head><body><form action='' onsubmit='sende(this); opener.zeige(); self.close(); return false'><p><input type='text' name='bla'> <input type='submit' value='senden'><\/p><\/body><\/html>");  
     neuesfenster.document.close();  
    }  
    </script>  
    </head>  
    <body>  
      
    <p onclick="oeffne()" id="a">öffne fenster</a></p>  
      
    </body>  
    </html>  
    
    

    Mathias

    1. Hallo Mathias,

      vielen Dank erstmal für dein Beispiel, welches zumindest auf meinem PC funktioniert. Mal sehen, ob das in der "fremden" Umgebung eines anderen Servers auch noch klappt (dort will ich die style-Angaben von DIVs modifizieren).
      Ich hatte es bisher mit insertAdjacentHTML versucht (und nicht mit document.write), und das klappte zumindest für die Script Tags nicht.

      Ralf

      1. Strike!

        Ich hatte bei meinen ersten Versuchen die "" in den closing tags nicht drin und daher hat es nicht funktioniert. Wenn das dann noch in einer PHP-Umgebung abläuft, muss sogar "\" codiert werden, damit PHP noch ein "" übrig lässt. Bei ASP reicht ein "".

        Jedenfalls hat im ersten Versucht die Änderung der Originalseite geklappt.

        Nun muss ich nur noch das komplette PopUp für document.write aufbereiten ...

        Nochmals meinen allerherzlichsten Dank! Das Problem ist gelöst (auch mein Eintrag von heute mittag (langen Parameter an Popup übergeben) hat sich damit erledigt.

        Ralf

    2. Tag molily.

      Zum Beispiel: [...]

      Hm, was hältst du von meinem Ansatz kombiniert mit Zerlegen des Querystrings?

      Siechfred

      --
      Früh übt sich ... (74kB)
      Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
      1. Hallo Siechfred,

        Hm, was hältst du von meinem Ansatz kombiniert mit Zerlegen des Querystrings?

        war zwar nicht an mich gerichtet, aber als TE kann ich nur dazu sagen, dass ich vom Popup nicht in der Form auf das Hauptfenster zugreifen kann (ist eine PHP-generierte Seite mit dynamischer Adresse).

        Grundsätzlich finde ich die Methode mit dem Zugriff auf das opener Objekt aber eleganter ;)

        Ralf

      2. Hallo,

        Hm, was hältst du von meinem Ansatz kombiniert mit Zerlegen des Querystrings?

        Es löst eine andere Aufgabe. Es lädt die die Ursprungsseite neu und überträgt die Daten aus dem Popup somit zum Server. Wenn die Daten direkt auf dem Server braucht und ggf. anhand dessen die Ursprungsseite neu generieren will, ist diese Vorgehensweise sehr sinnvoll. Andererseits ist das Übertragen von Daten im Query String ein Flaschenhals. Dann würde ich eher das Formular im Popup-Fenster gewöhnlich als Formular an den Server senden und die Ergebnisseite macht ein self.close(). Wenn man Daten von JavaScript-Scope zu JavaScript-Scope übertragen will, die nicht Strings und vielleicht einfache Zahlen sind (und selbst bei Strings gibt es das Problem der URL-Kodierung und -Dekodierung), und evtl. Funktionen anstoßen will, ist der Query String und das Neuladen weniger geeignet als das direkte Kopieren über opener/Fensterobjekt. Es kommt also auf die Anforderungen an, welche Methode sinnvoller ist.

        Mathias

        1. Tag molily.

          Es löst eine andere Aufgabe. Es lädt die die Ursprungsseite neu und überträgt die Daten aus dem Popup somit zum Server.

          Ja, zweifelsohne, soweit hatte ich mich in die Ausgangsfrage nicht reingedacht.

          Es kommt also auf die Anforderungen an, welche Methode sinnvoller ist.

          Ich werde das am Besten auf meiner Seite vermerken. Irgendwelche Einwände, wenn ich deinen Code (mit Quellen- und Autorenangabe) in meine Sammlung aufnehme?

          Siechfred

          --
          Früh übt sich ... (74kB)
          Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.