Fensterverwaltung


Javascript kann auf dem Nutzerbildschirm Fenster anlegen und verwalten. Es ist keine Kunst, diese Möglichkeit zu mißbrauchen und Werbefenster sich hartnäckig immer wieder vordrängen und ausgesprochen lästig werden zu lassen. Die Möglichkeit kann aber auch im Sinne verbesserter Navigation genutzt werden. Dabei kommt es darauf an, dem Nutzer "in die Hand" zu arbeiten, ihm keine unnötigen Probleme zu bereiten.
Zu lösen wären ein zu akzeptierendes Problem und eines, das keins sein müßte.

Das Problem:

Sie halten wichtige Links im Angebot, möchten aber gerne, daß der Nutzer nicht auf fremden Sites verbleibt, sondern wieder zu Ihnen zurückkehrt. Natürlich könnte er die Möglichkeiten des Browsers zur Rückkehr nutzen, das wird aber dann sehr lästig, wenn er innerhalb der Fremdsite mehrere Stationen zurückgelegt hat. Ihm kann man ein neues Fenster anbieten, das so lange zur Navigation dient, bis er die Rückkehr wünscht. Zu diesem Zweck muß er dann einfach das oberste Fenster schließen, um wieder auf Ihrer Site zu landen. HTML sieht dies mit der Target-Angabe "_blank" standardgemäß vor.
Leider ist die Welt nicht so gut, wie sie sein sollte.
Nutzt man diese Target-Angabe, dann öffnet Netscape eine exakte Kopie des vorhandenen Fensters. Das hat Logik. Wer neben meiner Seite die Börsenkurse sehen wollte, wird das auch neben der von mir empfohlenen Linkseite wollen.
Der IExplorer der bekannten Firma hält weniger von den Rechten seiner Kunden. Er öffnet ein Einheitsfenster, das sich an 14-Zoll-Bildschirmen orientiert, unabhängig davon, wie groß das anfordernde Fenster war. Zum Glück gestattet JavaScript sehr weitgehende Zugriffe auf die Fenster des Nutzers. Dies läßt sich ausnutzen.


Neues Fenster für externe oder interne Links öffnen

Die Technik der Öffnung eines Fensters ist schon anläßlich der Textausgaben besprochen worden. Sie geht völlig unkompliziert mit window.open(). Allerdings sind dabei einige Parameter von nicht unbedeutender Wichtigkeit.
In der Argumentklammer müssen mindestens zwei Einträge erscheinen, der erste für die URL der zu ladenden Seite. Es folgt ein frei vergebbarer Name, unter dem man das Fenster dann nicht ansprechen kann. Ein dritter in Anführungsstriche gestellter String ist optional. Er enthält Steuercodes für das Fenster. Davon gibt es eine Menge. In Javascript 1.2 sind sehr interessante hinzugekommen, leider funktioniert nur wieder ein kleiner Teil in beiden Großbrowsern. Die folgende Tabelle zeigt die herkömmlichen (und meist funktionierenden) Angaben.

Bezeichnungmögliche WerteBedeutung bzw.Kommentar
directoriesyes, noLeiste mit Verzeichnis-Buttons
height, widthPixelzahl, numerischHöhe und Breite des Anzeigebereiches im neuen Fenster
left, topPixelwerteAngaben zur Position des Fensters
locationyes, noEingabefeld zur Eingabe von URL's in den Browser
menubaryes, noMenüleiste
resizableyes, noFenstergröße veränderlich
scrollbarsyes, noHorizontale und vertikale Scrollbars werden bei Bedarf angelegt
statusyes, noStatuszeile
toolbaryes, noBrowser-Leiste mit Vor- und Zurück-Button

Wenn eine Parameter-Angabe erfolgt, gelten alle nicht vorhandenen als=no gesetzt. Die bloße Angabe eines Merkmals gilt als =yes. Mehrere Merkmalsangaben werden durch Komma voneinander getrennt. Besondere Probleme bereiten die Größenangaben. Da hier keine Parameter akzeptiert werden, und man den Bildschirm des Nutzers nicht kennt, sind die Größenangaben nur für relativ kleine Fenster (für Textausgaben) interessant. Immer, wenn die Größen nicht umgesetzt werden können, wird ein Standardfenster geöffnet, das für Webseiten zu klein ist.
Über einen zugewiesenen Fensternamen kann man aber glücklicherweise das Fenster mit Befehlen verändern, die zwar zu JavaScript 1.2 gehören, aber von den aktuellen Großbrowsern akzeptiert werden.
Die Seite sollte erst nach Anpassung des Fensters geladen werden, um zu vermeiden, daß sie zweimal aufgebaut werden muß.


Maximiertes Fenster öffnen

Als erstes soll ein Fenster geöffnet werden, das den ganzen Bildschirm ausnutzt. Dabei kann allerdings der Nutzer schwer geärgert werden. Zu rechtfertigen ist es allenfalls, wenn die zu ladende Seite (es geht natürlich um eine Fremdseite, Ihre eigenen sind ja alle flexibel genug gestaltet!), wenn sie also eine Einengung partout nicht verträgt.
Ein Vorteil, der genannt werden soll, das neue Fenster kann um überflüssige Platzfresser erleichtert werden. Diese Platzfresser werden allerdings gelegentlich benötigt. Hier im Beispiel ist die Leiste mit den Lesezeichen weggelassen, der User 'guckt ja nur mal schnell' und soll dann zur weiteren Arbeit erst zurückkehren.

Im Kopfbereich wird die erforderliche Funktion definiert: 
function oeffne_max(adr)
{
   neufens=window.open("","hfens","toolbar,location,status,scrollbars,resizable,menubar");
   neufens.moveTo(0,0);
   neufens.resizeTo(screen.availWidth,screen.availHeight);
   neufens.location.href=adr;
}
am Aufrufort erscheint der Link-Code mit dem Funktionsaufruf:
<a href="javascript:oeffne_max('http://www.meinlink.de')">Der Link-Text</a>

Das war schon alles. Nun fehlt noch ein Test. Damit etwas lädt, nehme ich die Startseite des Kurses. Probiermersch's!


Fenster in alter Größe öffnen

Schön wäre ja, man könnte das neue Fenster in alter Größe und genau auf dem alten errichten. Letzteres funktioniert erst mal nicht, weil man die Lage des Fensters auf dem Bildschirm nicht ermitteln kann.
Eine gute und eine schlechte Nachricht:
Die gute zuerst.
Wenn ein moderner Netscape-Browser benutzt wird, dann kann mit dem Parameter dependent ein neues Fenster als "Kind" des vorhandenen angelegt werden. Es wird eine exakte Kopie angezeigt, bei Netscape (außer 6!) leicht gegen das alte Fenster versetzt, sofern das alte Fenster nicht maximiert ist. Das hat den Vorteil, daß das Kind-Fenster als solches deutlich erkennbar bleibt. Die Verschiebung um jeweils ca. 30 Pixel nacht rechts und unten wäre leicht zu beseitigen.
Die schlechte Nachricht.
Der IExplorer kennt "dependent" nicht, weigert sich auch, irgendwelche Details des aufrufenden Fensters ermitteln zu lassen. Keine Chance also, das vorhandene Fenster zu duplizieren. Um nicht immer das ewig zu kleine Standardfenster zu schaffen, hier ein anderer Vorschlag. Es wird ein Fenster geöffnet, das z. B. 90% der Bildschirmfläche belegt. Das ist groß genug, um zeitweilig darin zu arbeiten, es verrät sich als zusätzlich und seine Kanten sind für verändernde Mauszugriffe gut zugänglich.

function oeffne_pass(adr)
{
   if(navigator.appName.charAt(0)=="N")
      neufens=window.open("","hfens","toolbar,location,status,
      scrollbars,resizable,menubar,dependent");
   else
   {
      neufens=window.open("","hfens","toolbar,location,status,
      scrollbars,resizable,menubar");
      neufens.moveTo(0,0);
      neufens.resizeTo(0.9*screen.availWidth,0.9*screen.availHeight);
   }
   neufens.location.href=adr;
}
am Aufrufort erscheint der Link-Code mit dem Funktionsaufruf:
<a href="javascript:oeffne_pass('http://www.meinlink.de')">Der Link-Text</a>

Schauen Sie es sich an! Es erscheint,wie oben der Kurs im neuen Fenster noch einmal. Test hier!