Wie kann ich überprüfen, ob ein mit JavaScript erstelltes Fenster offen ist?
Vielen Dank für alle Antworten
Simon
zur grundlegenden bewaeltigung Deines problemes
hier der quellcode von zwei seiten aus einem
meiner projekte:
die erste seite(quellcode_01) repraesentiert Deine
home-site;
die zweite seite(quellcode_02)wird in Dein fenster
geladen, welches Du aufrufst, und ueber das Du die
volle kontrolle behalten moechtest;
die steuerung Deines fensters erfolgt ausschlies-
slich durch funktionen, die mit dem aufruf Deiner
homepage geladen werden - diese scripte kannst Du
im ersten <frame> eines einfachen zwei-spaltigen/
zeiligen <frameset>s..[0,*]..plazieren - das wurde
im ersten quellcode-beispiel so realisiert - der
0-frame heisst dort top.SCRIPTE und enthaelt den
ersten quelltext.
Du darfst den <frameset> aber auch ruhig weglassen
- dann solltest Du aber den aufruf der funktion
CHECK_MY_FRAMES() im <BODY...> weglassen - diese
funktion dient nur dazu, ein aufrufen der scripte
in einer falschen umgebung(z.B.: falsche oder
keine frames) zu unterbinden...
diese seite enthaelt also zwei globale variablen,
die Dir das steuern Deines fensters ermoeglichen -
ich nenne das fenster einmal BEGLEITER_WINDOW, und
die variablen heissen in meinem fall zum einen
var BEGLEITER_Fenster = null; und zum anderen
var begleiter_fenster = false; -
warum ich zwei variablen zur kontrolle benutze,
werde ich gleich erklaeren:
*BEGLEITER_Fenster steht fuer Dein fenster-objekt,
*begleiter_fenster ist Dein persoenlicher aufpas-
ser - weshalb:
wenn ein fenster ueber den [x]-knopf geschlossen
wird,verlierst Du die kontrolle ueber die variable
BEGLEITER_Fenster..das fenster ist geschlossen,die
variable ist aber unter umstaenden trotzdem nicht
auf null zurueckgesetzt - ein schwerwiegendes pro-
blem, da Diese variable das fenster mit der open-
methode geoeffnet hat ... also um die ecke denken
und ein zweites script mit einer kontrollinstanz
einfuehren ... dieses script (quellcode_02) wird
um und in den inhalt eines jeden dokuments gebaut,
welches in Deinem fenster geoeffnet werden soll;
die funktion self.CHECK_mySELF() und die variable
i_am_ok sind wichtig, wenn Du schoen scripten
moechtest - das script verhindert die anzeige
des fensterinhaltes in allen anderen browserfen-
stern, die nicht ueber Deine scripte geoeffnet
wurden und teilt Deinem persoenlichen aufpasser
ueber "opener.begleiter_fenster=true;" ganz offi-
iell mit, dass Dein Fenster (und das macht nur mit
inhalt sinn) existiert ... beim schliessen des
fensters (egal ob ueber script oder mit [x]) ver-
liert Dein kontrolleur jegliches interesse an
einem fenster -"opener.begleiter_fenster=false;"-
und zur doppelten absicherung wird dabei auch
opener.BEGLEITER_Fenster auf null gesetzt;
tritt der unglueckliche zufall ein, dass bei einer
schlechten netzanbindung Dein gerade geoeffnetes
fenster -noch voellig schutzlos(ohne inhalt)-
geschlossen wird-[x]-, hast Du jetz ueber die zwei
variablen und ueber das anwenden von logischen
verknuepfungen die moeglichkeit, doch noch den
wahren status Deines fensters in erfahrung zu
bringen.
fazit:
die beantwortung Deiner frage, fuehrte zu einem
ausfuehrlicheren rundumschlag als ich es selber
je angenommen haette;
liess die scripte, verstehe diese, wende Sie an
und veraendere sie fuer Deine zwecke;
die scripte:
*quellcode_01
<!doctype html public "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>scripte.htm</TITLE>
<!--
SCRIPTE.HTM //
//
//
scripte.htm // fuer browser, die
// das IMAGEobjekt
// verstehen koennen
//
supported and programmed by peter seliger 1998
questions to and requests for JavaScript-stuff
will be recognized through/by pseliger@gmx.net
-->
<script language="JavaScript">
<!--
function CHECK_MY_FRAMES()
{
if (top.frames.length == 2)
{
if ((top.frames[0].name == "SCRIPTE") && (top.frames[1].name == "INHALTE"))
{
return;
}
else
{
...bla
...platz fuer individuelle fehlerbehandlung z.B.:
alert(...deine individuelle fehlermeldung...)
...bla
}
}
else
{
...bla
...platz fuer individuelle fehlerbehandlung z.B.:
alert(...deine individuelle fehlermeldung...)
...bla
}
}
var SCRIPTE\_RahmenFenster = self; // SCRIPTE ist ein rahmen des TOP-windows,
// und jetzt "weiss" die variable dies auch
var BEGLEITER_Fenster = null; // ist die fenster-variable, ueber die alle themen-fenster gesteuert werden
var begleiter_fenster = false; // ueberprueft, ob BEGLEITER_Fenster ueberhaupt existiert
var begleiter_eigenschaften = ""; // enthaelt die fenster-eigenschaften fuer jedes thema
var begleiter_adresse = ""; // enthaelt die documenten-adresse fuer die verschiedenen themen
function IGNORIEREN()
{
return true;
}
function BEGLEITER\_AUF()
{
if ((!begleiter_fenster) (BEGLEITER_Fenster == null))
{
BEGLEITER_Fenster = window.open(begleiter_adresse,"BEGLEITER_WINDOW",begleiter_eigenschaften);
if (BEGLEITER_Fenster.opener == null)
{
BEGLEITER_Fenster.opener = SCRIPTE_RahmenFenster;
}
top.SCRIPTE.BEGLEITER_Fenster.focus();
MITTEILUNG_AUS();
}
else
{
top.SCRIPTE.BEGLEITER_Fenster.focus();
}
}
function BEGLEITER\_ZU()
{
if ((begleiter_fenster) && (BEGLEITER_Fenster != null))
{
top.SCRIPTE.BEGLEITER_Fenster.close();
MITTEILUNG_AUS();
}
}
function BEGLEITER\_FOCUS()
{
if ((begleiter_fenster) && (BEGLEITER_Fenster != null))
{
top.SCRIPTE.BEGLEITER_Fenster.focus();
}
}
//-->
</script>
</HEAD>
<BODY topmargin="0" leftmargin="0" bgcolor="#000000" bgproperties="fixed" text="#000000" link="#000000" vlink="#000000" alink="#000000"
onerror="self.IGNORIEREN()"
onload="self.CHECK_MY_FRAMES()...und weitere aktionen/funktionen"
onunload="self.BEGLEITER_ZU()...und weitere aktionen/funktionen">
...wenn diese seite nicht in einem <frame> steht,
...dann kommt hier Dein seiteninhalt samt den
...funktionsaufrufen hinein:
...z.B.: onAction = "self.BEGLEITER_AUF()"
...ausserdem solltest Du die nicht mehr benoetigte
...funktion CHECK_MY_FRAMES() loeschen und deren
...aufruf durch onload unterbinden
</BODY>
</HTML>
*quellcode_02
<!doctype html public "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META NAME="DESCRIPTION" CONTENT="...">
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html;CHARSET=iso-8859-1">
<META HTTP-EQUIV="KEYWORDS" CONTENT="...">
<META NAME="AUTOR" CONTENT="peter seliger">
<TITLE>...z.B.: dein navigationsfenster / Inhaltsverzeichnis</TITLE>
<!--
BEGLEITER.HTM //
//
// begleiter.htm
// fuer browser, die
// das IMAGEobjekt
// verstehen koennen
//
supported and programmed by peter seliger 1998
questions to and requests for JavaScript-stuff
will be recognized through/by pseliger@gmx.net
-->
<script language="JavaScript">
<!--
var i_am_ok = null; // noch nicht definiert
if (opener)
{
i_am_ok = true;
}
else // werte jetzt zugewiesen
{
i_am_ok = false;
}
// var dieser_bg = "";
//
// if (navigator.appName == "Microsoft Internet Explorer")
// {
// dieser_bg = "../bilder/bg.jpg";
// }
// else
// {
// dieser_bg = "../bilder/bg_rand.gif";
// }
function IGNORIEREN()
{
return true;
}
function CHECK\_mySELF()
{
if (i_am_ok)
{
opener.begleiter_fenster=true;
...bla
...bla
...bla
}
else
{
...bla
...platz fuer individuelle fehlerbehandlung z.B.:
alert(...deine individuelle fehlermeldung...)
...bla
}
}
//-->
</script>
</HEAD>
<BODY topmargin="0" leftmargin="0" bgcolor="#E67300" background="../bilder/bg_rand.gif" bgproperties="fixed" text="#ffffff" link="#008080" vlink="#008080" alink="#ff0000"
onerror="self.IGNORIEREN()"
onfocus=...deine individuellen aktionen/funktionen...
onload="self.CHECK_mySELF()"
onunload="if(i_am_ok){opener.BEGLEITER_Fenster=null;opener.begleiter_fenster=false;}">
...bla
...platz fuer individuellen fensterinhalt
...bla
</BODY>
</HTML>
viel vergnuegen und by(t)e by(t)e pseliger@gmx.net