Jo: Variablen auf bereits geöffnetes Fenster übertragen

Hallo,

ich öffne via Javascript aus einem Frameset heraus ein Fenster:

window.open('query.php','query','status=yes,resizable=yes,width=480,height=300,scrollbars=yes').self.focus();

jetzt wird in diesem Fenster in einem Formular editiert und nach Aktivierung eines Bearbeitungsmodus wieder in das Hauptfenster zurückgegangen ohne das Fenster "query" zu schließen.
Auf Klick im Hauptfenster werden Koordinaten ermittelt, die wiederum an das Fenster "query" übergeben werden sollen.

Meine Fragen:
1. Wie spreche ich jetzt das Fenster an um die Variablen zu übergeben ohne die aktuellen Inhalte zu verändern? (den Fokus auf das Fenster zu setzen, es also wieder von der Taskleiste zu holen, funktioniert über den Aufruf window.open('','query','').self.focus();)

2. Wie kann ich ermitteln, ob überhaupt das Fenster noch geöffnet ist?

Danke + Gruß
Jo

  1. Hallo Jo,

    Du solltest Dir die Instanz auf das geöffnete Fenster einfach speichern.
    var win = window.open(<par>)

    Dann kannst Du mittels dieser auch auf das Fenster zugreigen zB win.focus() oder win.closed usw.

    Mit freundlichem Gruß
    Micha

    1. Wie spreche ich jetzt das Fenster an

    Indem du den Rückgabewert von window.open() in einer Variablen speicherst.

    Der Aufruf window.open('','query','').self.focus(); ist zum Beispiel gleich in doppelter Hinsicht Unsinn: Erstens möchtest du das Fenster nicht aufmachen, window.open() ist daher falsch am Platz. Zweitens zeigt das Fenster mit self auf sich selbst und ist somit überflüssig, denn du hast ja schon Zugriff auf das Fenster. window.open(…).focus(); funktioniert genauso gut.

    um die Variablen zu übergeben ohne die aktuellen Inhalte zu verändern?
    2. Wie kann ich ermitteln, ob überhaupt das Fenster noch geöffnet ist?

    Alles mit dem Window-Objekt:

    Fenster öffnen:                 var fenster = window.open('query.php','query' …);
    Fenster nach Vorne holen:       fenster.focus();
    Variable x in Fenster setzen:   fenster.x = "bla";
    Funktion y in Fenster aufrufen: fenster.y();
    Fenster noch da?                if ((fenster) && (fenster.document)) { …

    Mit folgendem habe ich gerade rumgespielt:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
    <html>  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    <title></title>  
      
    <style type="text/css">  
    </style>  
      
    <script type="text/javascript">  
    var fenster;  
      
    function oeffnen() {  
     fenster = window.open('test.html','test2','status=yes,resizable=yes,width=480,height=300,scrollbars=yes');  
    }  
      
    function fokus() {  
     fenster.focus();  
    }  
      
    function hallo() {  
     alert(hallotext);  
    }  
      
    </script>  
      
    </head>  
      
    <body>  
    <button onClick="oeffnen()">Öffnen</button>  
    <button onClick="fokus()">Fokussieren</button>  
    <button onClick="fenster.hallotext='Hallo, Welt!'; fenster.hallo();">Hallo!</button>  
    <button onClick="if ((fenster) && (fenster.document)) { alert('Offen'); } else { alert('Zu'); }">Noch offen?</button>  
    </body>  
      
    </html>
    
    1. Vielen Dank für die Hilfe,

      wie kann ich aber die Funktion von einem anderen Frame aus nutzen?
      Wenn ich Deine Beispieldatei in einem Frameset lade funktioniert der Aufruf immer nur von dem Frame von dem ich das Fenster aufgerufen habe.
      Sorry, ich bin mit Javascript noch ein bisschen neu.
      Gruß
      Jo

      1. wie kann ich aber die Funktion von einem anderen Frame aus nutzen?
        Wenn ich Deine Beispieldatei in einem Frameset lade funktioniert der Aufruf immer nur von dem Frame von dem ich das Fenster aufgerufen habe.

        Dann solltest du die Variable fenster im übergeordneten Rahmen anfüttern. Ich habe mit Frames nicht viel am Hut, deshalb rate ich jetzt einfach mal, dass du sämtliche Referenzen an fenster durch parent.fenster oder ersetzen musst.

        Falls das nicht funktioniert: Mit der Firefox-Erweiterung Firebug kannst du die Javascript-Umgebung eingehend inspizieren und schauen, wo sich fenster versteckt.