Existens eines Fensters prüfen
André Laugks
- javascript
Hallo!
Ich möchte prüfen, ob ein neu geöffnetes Fenster existiert. Ich habe keine Probleme, wenn man das Fenster automatisch öffnet, siehe auch http://www.teamone.de/selfhtml/tecb.htm#a2. Nur öffnet man das neue Fenster über einen Link. In diesem Fenster kann man sich durch Seiten klicken. Wenn nun das Mutterframe im Vordergrund ist und man auf den Link fürs neue Fenster klickt, soll das neue Fenster nur wieder in den Vordergrund geholt werden. Lasse ich es nochmal über fenster = open(...) laufen, wird seite1.html geladen.
Ich führe mal zwei Beispiele auf. Das alert ist nur zu Testzwecken da!
Die erste Möglichkeit funktioniert prächtig, solange man nicht das neue Fenster schließt. Die Variable Fenster existiert dann, und man gelangt immer in den else-Block.
function fenster()
{
if(!self.fenster)
{
alert("Fenster nicht vorhanden und oeffne es!");
fenster = window.open("seite1.html", "kl", "width=200,height=200");
}
else
{
alert("Fenster ist offen und hole es in den Vordergrung!");
setTimeout("fenster.focus()", 200);
}
}
Die zweite Möglichkeit führt mich immer in den if-Block, da ja das Fenster, in der die Funktion steht, nicht den Namen "kl" hat. Funktioniert würde es, wenn ich alle offenen Fenster nach Ihren Namen fragen könnte! Nun ich finde in den Dokus keine Eigenschaft oder Methode, wie man alle offenen Browserfenster nach dem Namen fragen könnte.
function fenster()
{
if(!parent.kl)
{
alert("Fenster nicht vorhanden und oeffne es!");
fenster = window.open("seite1.html", "kl", "width=200,height=200");
}
else
{
alert("Fenster ist offen und hole es in den Vordergrung!");
setTimeout("fenster.focus()", 200);
}
}
Gibt es eine Lösung? Ich vermute, da ich auf dem ganzen falschen Dampfer bin! :-)
Vielen Dank und MfG, André Laugks
Hallo!
Ich möchte prüfen, ob ein neu geöffnetes Fenster existiert. Ich habe keine Probleme, wenn man das Fenster automatisch öffnet, siehe auch <../../tecb.htm#a2>. Nur öffnet man das neue Fenster über einen Link. In diesem Fenster kann man sich durch Seiten klicken. Wenn nun das Mutterframe im Vordergrund ist und man auf den Link fürs neue Fenster klickt, soll das neue Fenster nur wieder in den Vordergrund geholt werden. Lasse ich es nochmal über fenster = open(...) laufen, wird seite1.html geladen.
Ich führe mal zwei Beispiele auf. Das alert ist nur zu Testzwecken da!
Die erste Möglichkeit funktioniert prächtig, solange man nicht das neue Fenster schließt. Die Variable Fenster existiert dann, und man gelangt immer in den else-Block.
function fenster()
{
if(!self.fenster)
{
alert("Fenster nicht vorhanden und oeffne es!");
fenster = window.open("seite1.html", "kl", "width=200,height=200");
}
else
{
alert("Fenster ist offen und hole es in den Vordergrung!");
setTimeout("fenster.focus()", 200);
}
}Die zweite Möglichkeit führt mich immer in den if-Block, da ja das Fenster, in der die Funktion steht, nicht den Namen "kl" hat. Funktioniert würde es, wenn ich alle offenen Fenster nach Ihren Namen fragen könnte! Nun ich finde in den Dokus keine Eigenschaft oder Methode, wie man alle offenen Browserfenster nach dem Namen fragen könnte.
function fenster()
{
if(!parent.kl)
{
alert("Fenster nicht vorhanden und oeffne es!");
fenster = window.open("seite1.html", "kl", "width=200,height=200");
}
else
{
alert("Fenster ist offen und hole es in den Vordergrung!");
setTimeout("fenster.focus()", 200);
}
}Gibt es eine Lösung? Ich vermute, da ich auf dem ganzen falschen Dampfer bin! :-)
Vielen Dank und MfG, André Laugks
Hallo!
Ich möchte prüfen, ob ein neu geöffnetes Fenster existiert. Ich habe keine Probleme, wenn man das Fenster automatisch öffnet, siehe auch <../../tecb.htm#a2>. Nur öffnet man das neue Fenster über einen Link. In diesem Fenster kann man sich durch Seiten klicken. Wenn nun das Mutterframe im Vordergrund ist und man auf den Link fürs neue Fenster klickt, soll das neue Fenster nur wieder in den Vordergrund geholt werden. Lasse ich es nochmal über fenster = open(...) laufen, wird seite1.html geladen.
:-( Mal öffters was genauer lesen vor dem Abschicken.
Ich will das Fenster über eine Funktion öffnen. Und mit Mutterframe, meine ich das Mutterfenster. Also das Fenster, über das das neue Fenster geöffnet wurde.
mfg, André Laugks
oops - sorry - fuer das erste posting;
zu lange gearbeitet - bin noch nicht wieder ganz fit;
..also 2ter versuch..
Hallo von André,
leider musst Du enttaeuscht werden:
grundsaetzlich kann JavaScript nur auf eigenschaften und methoden
von window-objekten zugreifen, die durch scripte erzeugt wurden:
* ein fenster, welches mit <a href="..." target="_blank" erzeugt
wurde, "weis" nichts ueber seine "eltern" und steht deshalb fuer
sich alleine - genauso "ahnungslos" geht das "erzeuger-fenster"
mit seinem "elternglueck" um - scripte koennen also weder in
die eine (opener.____) noch in die andere richtung ausgefuehrt
werden;
Nur oeffnet man das neue Fenster ueber einen Link.
warum willst Du das Fenster ueber "<a href.." erzeugen, wenn es
genausogut mit einem script geht ? - die loesung dafuer hast
Du doch schon ! - fuer browser, bei denen "JavaScript" nicht
laeuft, kannst Du mit Deinem leicht modifizierten script trotzdem
ein "konventionelles" fenster oeffnen:
<html>
<head>
<title>...</title>
<script language="JavaScript">
<!--
function fenster()
{
if(!self.fenster)
{alert("Fenster nicht vorhanden und oeffne es!");
fenster=window.open("seite1.html","kl","width=200,height=200");
}
else
{
alert("Fenster ist offen und hole es in den Vordergrung!");
setTimeout("fenster.focus()", 200);
}
return false;
}
//-->
</script>
</head>
<body>
<a href="seite1.html" target="_blank" onklick="return fenster()">
....
</a>
</body>
</html>
hoffe, das hilft weiter - tschuess - peter - pseliger@gmx.net
Hallo!
leider musst Du enttaeuscht werden:
grundsaetzlich kann JavaScript nur auf eigenschaften und methoden
von window-objekten zugreifen, die durch scripte erzeugt wurden:
* ein fenster, welches mit <a href="..." target="_blank" erzeugt
wurde, "weis" nichts ueber seine "eltern" und steht deshalb fuer
sich alleine - genauso "ahnungslos" geht das "erzeuger-fenster"
mit seinem "elternglueck" um - scripte koennen also weder in
die eine (opener.____) noch in die andere richtung ausgefuehrt
werden;
Du öffnest 2 Browserfenster und jedem Fenster eine verschiedene Datei, einmal link.html und ziel.html.
In der Datei link.html steht folgendes:
<html>
<body>
<a href="http://www.yahoo.de" target="kl">Yahoo.de</a>
</body>
</html>
In der Datei ziel.html steht dies:
<html>
<head>
<script language="JavaScript">
<!--
self.name = "kl;"
//-->
</script>
</head>
<body>
</body>
</html>
Beide Seiten werden nun in je einem Browserfenster geladen. Wenn Du auf den Link klickst, wirst Du sehen, das yahoo.de in dem Fenster geladen wird, in der die Seite ziel.html befunden hat.
Das Fenster mit der Datei ziel.html wurde nicht über ein Script in der Datei link.html geöffnet. Woher weis nun das Fenster mit der Datei link.html, das es ein anderes Fenster mit dem Namen "kl" gibt.
Beide Fenster haben miteinander keine Beziehung, also das eine hat nicht das andere geöffnet. Es muß also eine zentrale Stelle geben, die weis, wieviel Fenster offen sind und wenn sie einen Namen haben, wie er lautet.
Und ich würde nun gern wissen, wie ich diese besagte Stelle auquetschen kann! :-)
mfg, André Laugks
Hallo André,
function fenster()
fenster = window.open("seite1.html", "kl", "width=200,height=200");
:-) aber, aber Andre, Funktionsname und Variablenname sind gleich? Das verträgt sich überhaupt nicht. Beide müssen verschieden sein.
Es gibt eine Alternative. Speichere den Fenstennamen in einem assoziativen Array. Dies ist gleichzeitig deine Fenstervariable, die du für den Zugriff brauchst.
Beispiel:
c=new Array()
function fenster(x)
{
if (!window.c[x]) c[x]=window.open("links.htm",x);
c[x].focus()
}
<a href="javascript:fenster('fenster1')">c["fenster1"]</a><br>
<a href="javascript:fenster('fenster2')">c["fenster2"]</a>
Viele Grüße
Antje
<img src="http://pc-anfaenger.de/pca/sam/pcanfaenger.gif" alt="">
Hallo Antje!
:-) aber, aber Andre, Funktionsname und Variablenname sind gleich? Das verträgt sich überhaupt nicht. Beide müssen verschieden sein.
Es handelt sich um ein Tippfehler. Ich hatte das Script rein kopiert aber die Funktion vergessen. Ich hatte dann
schnell function fenster() { } geschrieben.
Ich hatte aber echt mal das Problem, das ich in einem Script eine Funktion und Variable mit gleichen Namen hatte.
Das war ein sehr aufwendiges DHTML Script, mit sehr viel Funktionen und Variablen. Die Funktion hatte
ich am Anfang geschrieben und die eine Variable mit gleichen Namen, erst nach längerer Zeit angelegt.
Ich war dann aufeinmal verblüft, das nichts mehr richtig funktionierte, bis mir nach sehr langer Zeit die
Namensgleichheit aufgefallen ist.
mfg, André Laugks
Hallo,
Ich gebe wieder, wie ich Dich verstanden habe:
in einer Seite wird per Funktionsaufruf eine neues Fenster
erzeugt:
index.htm, darin:
function fensterneu (theURL,winName,features) {
fenster = window.open("neuesfenster.html", "neuesfenster",
"width=200,height=200");
fenster.focus()
}
<a href="#" onclick="fensterneu();return default">klick</a>
In neuesfenster.html kann man jetzt ein wenig rumklicken.
Gerät das Fenster in den Hintergrund oder wird zugemacht,
kannst Du es einfach wieder neu öffnen, wenn jemand erneut
auf klick klickt. Da wird nicht geprüft, ob die Datei vorhanden
ist oder nicht, sondern einfach das Fenster neu gemacht.
Sollte es Probleme mit den focus() geben, schreibe das einfach
in <body onload="self.focus();">
---
So, Lösung Nummer 2:
Nachteil der Lösung 1 könnte sein, daß immer, wenn man auf
"klick" klickt, neuesfenster.html geladen wird.
Wenn sich jemand von neuesfenster1.html zu neuesfenster1.html
geklickt haben, dann das neue fenster in den Hintergrund legt,
und will dieses dann bei klick auf "klick" einfach nur
wieder in den Vordergrund geholt werden, mit neuesfenster1.html
im fenster "neuesfenster", dann probier folgendes script:
<script language="JavaScript">
<!--
// ACH JA: es machst sich immer ganz gut, eine Variable
// zu definieren, die, bevor sie eigentlich definiert wird
// schon abgefragt werden könnte; vielleicht haben Deine
// Probleme ja auch daran gelegen???
fenster = null;
function fensterneu(theURL,winName,features) {
if (fenster) {
if (fenster.closed == true)
fenster = window.open(theURL,winName,features);
else {
fenster.focus();
}
}
else {
fenster = window.open(theURL,winName,features);
fenster.focus()
}
}
//-->
</script>
---
Lösung Nummer 1 funktioniert auch, wenn man von verschiedenen
Seiten aus das neue Fenster öffnen kann; es wird ja im Script
immer eins aufgemacht, egal obs schon da ist oder nicht.
Lösung Nummer 2 funktioniert nur, wenn das neue Fenster nur
von EINER Seite aus geöffnet wird. Lädst Du eine neue Seite
index2.htm und klickst auf den dortigen "klick", dann kommen
KEINE Fehlermeldungen, aber es wird ebenfalls einfach das
neu Fenster neu aufgemacht und dort neuesfenster.html geladen.
---
Ich hoffe, Dir damit geholfen zu haben.
Wenn nicht, dann schick doch mal den Originalcode oder stell
die Seiten online.
mfg, Thomas Mock