molily: Mehrere Popup-Fenster

Hallo zusammen,

für meinen Artikel über Popup (ewig alte Version: http://home.t-online.de/home/dj5nu/js-popup.html) möchte ich im Grunde genommen widerwillig den Teil ausbauen, welcher erläutert, wie mehrere Popups flexibel mit einer Funktion simultan geöffnet werden können.

Ursprünglich, das heißt auch in der verbesserten Version, hatte ich mir diesen Teil aufgespart unter dem Hinweis, dem Leser bewusst Informationen vorenthalten zu wollen, da diese Anwendung von Popups sowieso töricht sei. Jetzt möchte ich den Abschnitt jedoch auf Anraten ausbauen (obgleich ich immer noch keine sinnvolle Anwendungsmöglichkeit sehe).

Unglücklicherweise ist es nicht mit einem simplen Hinweis getan, da ich der Vollständigkeit halber auch konkrete Codebeispiele und funktionsfähige Beispiele geben will. Nun besteht zudem das Problem, dass eine Funktion, welche die Aufgabe flexibel löst zwar durchaus möglich ist, aber einerseits völlig am Thema vorbeigeht und andererseits in JavaScript-Feinheiten einsteigt, welche in diesem Rahmen im Grunde genommen nicht relevant sind und welche ich auch nicht in epischer Breite erklären möchte.

Die Ursprungsfunktion sieht folgendermaßen aus:

function oeffnefenster (url) {
 var fenster=window.open(url, "fenster1", "width=640,height=480,status=yes,scrollbars=yes,resizable=yes");
 fenster.focus();
 return false;
}

Diese soll durch einen zweiten Parameter dazu ausgebaut werden, mehrere Popup-Fenster zu öffnen. Logischerweise muss sich der vorher fest einprogrammierte Fenstername bei jedem Funktionsaufruf unterscheiden.

Den gesamten Abschnitt samt Versuchen habe ich herauskopiert (der Rest ist vorerst nicht relevant beziehungsweise die obigen Anmerkungen sollten für das Verständnis ausreichen):
http://home.t-online.de/home/dj5nu/fanhost/sf-pop-mehrere.html
Zum Codebeispiel am Dokumentanfang komme ich später.

Es geht zunächst darum, ob der Inhalt und die Sprache fehlerfrei, präzise und verständlich sind beziehungsweise die Beschreibungen fachlich und begrifflich korrekt sind. Bei einigen Begriffen bin ich mir unklar, da ich weder über fundiertes Wissen über OOP noch den JavaScript-Eigenheiten verfüge, beispielsweise erscheint mir »Fensterreferenz« beziehungsweise »Alias« unpassend, mir ist aber kein treffender Begriff bekannt.

Speziell geht es mir davon abgesehen um den Inhalt der beiden Absätze unter den Beispielen, welche die Nachteile der recht einfachen Lösung aufzeigen. Es geht darum, dass die vorgestellte Funktion zwar mehrere Popup-Fenster öffnet, sie sich aber nicht über eine JavaScript-Variable ansprechen lassen, da die verschiedenen Fensterobjekte, welche jeweils von window.open() zurückgegeben werden, in ein und derselben Variable gespeichert werden, wodurch nur das zuletzt geöffnete Fenster über die Variable fenster ansprechbar ist. (Wie beschrieben...) Ich habe mich darauf beschränkt, zwei Lösungsmöglichkeiten kurz und ohne Beispiele anzusprechen, wenngleich mir die Implementation bekannt ist. Ist es überhaupt klug, das Kapitel auszubauen, ohne eine flexible Lösung anzubieten?

Die erste Möglichkeit wäre das nachträgliche Aufnehmen einer Verbindung zum Popup. Ist diese Methode, soweit sie vorgestellt ist, interoperabel und empfehlenswert? Mir sind nicht alle Umstände bekannt, ich meine es aber schon öfters gelesen zu haben, finde aber tückischerweise beim googlen und im Archiv nichts, vielleicht fehlen mir die Suchbegriffe, weshalb diese Methode aus dem Kopf und durch Probieren entstanden ist. (In Grunde genommen ist es unmöglich, eine Vorgehensweise zu empfehlen, wenn die konkrete Anwendung nicht bekannt ist, das ist mir klar.)

Die zweite komplexere und vielseitige Möglichkeit ist im Codebeispiel am Dokumentanfang beispielhaft umgesetzt. Zuerst: funktioniert der Code in dieser Form? (Soweit ich es testen kann schon, vorher würde ich nicht fragen.) Wie sollte ich das Konzept des variablen Variablennamens kurz aber für JavaScript-Fortgeschrittene verständlich erklären, beziehungsweise ist es in der jetzigen Form angemessen behandelt? Ich wollte Christian K.s Artikel über Objekthandling in JavaScript verlinken, aber dann könnte ich auch ein konkretes Beispiel geben und würde damit komplett in themenfremde Erklärungen abdriften.

Besteht überhaupt ein konkreter Nutzen des Abschnittes - wenn nein, wie finde ich eine angemessene Form, hier den Hinweis unterzubringen, dass die erste Funktion mit festem Fensternamen zwar nur ein Popup zur gleichen Zeit zulässt, dies aber nur empfehlenswert ist? Reichen in diesem Falle Benutzbarkeitsargumente oder sollte ich zumindest in einem Satz sagen, dass man den Fensternamen ändern muss? Ich finde keinen Mittelweg, wie ich alles Nötige unterbringe, damit der Artikel in sich vollständig wird, aber dennoch vertiefende Hinweise weglasse, um mich nicht in Randthemen zu verlieren.
Ich tendiere dazu, den Abschnitt wieder herauszunehmen beziehungsweise wie beschrieben zusammenzukürzen, falls er nicht in sich abgeschlossen sein kann und zuviele Fragen offen bleiben - der Abschnitt ist schließlich nur eine Randanmerkung.

Soweit.

Grüße,
Mathias

  1. Hallo,

    Diese soll durch einen zweiten Parameter dazu ausgebaut werden, mehrere Popup-Fenster zu öffnen. Logischerweise muss sich der vorher fest einprogrammierte Fenstername bei jedem Funktionsaufruf unterscheiden.

    Wie waere es mit der Nutzung eines Arrays fuer die Fensterreferenzen? Dann kann z. B. fenster[0] die Referenz enthalten und fenster0 der Target-Name sein usw.

    Vom Prinzip her so:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Test by TM 03/03</title>
    <script language="JavaScript" type="text/javascript">
    <!--

    var fenster=new Array();
    var z=0;
    var parameter="width=640,height=480,status=yes,scrollbars=yes,resizable=yes";

    function oeffnefenster()
    {
      var args=oeffnefenster.arguments.length;

    for(i=z;i<z+args;i++)
      {
        fenster[i]=window.open(oeffnefenster.arguments[i],"fenster"+i,parameter);
      }

    z+=args;
    }

    //-->
    </script>
    </head>
    <body onload="oeffnefenster('a.htm','b.htm');oeffnefenster('x.htm','y.htm','z.htm')">
    <p>Test</p>
    </body>
    </html>

    Dieses Beispiel ruft die Funktion zweifach auf und uebergibt zwei bzw. drei Argumente, oeffnet also fuenf Fenster. Wichtig ist die interne Zaehlung (hier z), um nicht vorhandene Fenster beim Wiederaufruf zu ersetzen.

    MfG, Thomas

    1. [Nachtrag:]

      Die Funktion braucht noch Korrekturen:

      function oeffnefenster()
      {
        var args=oeffnefenster.arguments.length;

      for(i=z;i<z+args;i++)
        {
          fenster[i]=window.open(oeffnefenster.arguments[i-z],"fenster"+i,parameter);
        }

      z+=args;
      }

      MfG, Thomas

  2. Hallo Mathias,

    Diese soll durch einen zweiten Parameter dazu ausgebaut werden, mehrere Popup-Fenster zu öffnen. Logischerweise muss sich der vorher fest einprogrammierte Fenstername bei jedem Funktionsaufruf unterscheiden.

    Vielleicht habe ich auch nur ein Verständnisproblem bei dem, was Du haben willst, aber bei mir funktioniert folgender Code zuverlässig:

    window.open ('seite.html', '_blank', '...');

    Jedes Mal, wenn das ausgeführt wird, öffnet sich bei mir immer ein neues Fenster, egal wie viele schon offen sind. (Mozilla 1.2.1, Konqueror 3.1, Netscape 4.77, Opera 6.11, http://www.christian-seiler.de/temp/openblank.html)

    oder sollte ich zumindest in einem Satz sagen, dass man den Fensternamen ändern muss?

    Ja. Meiner Ansicht nach reicht es wirklich aus, einfach zu sagen, dass der Fenstername auf _blank zu ändern ist.

    Christian

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[