PopUp Fenster im Vordergrund halten
Sven
- javascript
Hallo zusammen,
ich habe eine HTML-Seite in der ich mehrere PopUp Fenster (mehrere Artikel) per Mausklick zum öffnen bringen kann.
Wie kann ich es erreichen, das wenn ich einen Artikel anklicke, das PopUp Fenster aufgeht und ich dann im Hauptfenster ein anderes PopUp Fenster aktiviere beide PopUps (bzw. alle bis dahin offenen PopUps) wieder in den Vordergrund kommen?
Würde mich über eine Antwort freuen. Wäre wirklich wichtig!
Viele Grüße
Sven
Hi,
das Fenster kennt die .focus()-Methode, mit der man es in den Vordergrund befördern kann. Du müsstest dir also irgendwo alle geöffneten Fenster merken (=Rückgabe des .open-Befehls), und dann alle durchgehen und .focus() aufrufen.
MfG
Rouven
Also ich hatte in der Richtung schonmal was. Hier der Code:
[CODE]
var popups = [];
function popup1() {
popups[popups.length] = window.open("link1.html", "_popup_"+popups.length, "directories=no,menubar=no,status=no,scrollbars=no,width=240,height=270");
for (var i=0; i<popups.length; i++) popups[i].focus();
}
function popup2() {
popups[popups.length] = window.open("link2.html", "_popup_"+popups.length, "directories=no,menubar=no,status=no,scrollbars=no,width=240,height=270");
for (var i=0; i<popups.length; i++) popups[i].focus();
}
[/CODE]
Das Problem ist jetzt nur das wenn ich mehrmals auf den selben Artikel klicke, er mir immer wieder ein weiteres PopUp aufmacht und nicht das bereits geöffnete in den Vordergrund holt.
Wo liegt da der Fehler?
Hi,
das Fenster kennt die .focus()-Methode, mit der man es in den Vordergrund befördern kann. Du müsstest dir also irgendwo alle geöffneten Fenster merken (=Rückgabe des .open-Befehls), und dann alle durchgehen und .focus() aufrufen.
MfG
Rouven
Hi,
na ja, Fehler ist da keiner, aber du pumpst die Fenster immer hinten in das Array rein. Wenn du derartiges Überschreiben verhindern willst, dann gib den Fenstern doch Titel, die vorhersehbar sind, also nicht auf die Array-Größe basieren, sondern auf dem was sie anzeigen. So kannst du suchen, ob es ein derartiges Fenster schon gibt.
MfG
Rouven
Hmm, also ich weiß jetzt nicht direkt wie du das meinst. Kannst du mir das am Beispiel vom Code zeigen?
Viele Grüße
Sven
Hi,
na ja, Fehler ist da keiner, aber du pumpst die Fenster immer hinten in das Array rein. Wenn du derartiges Überschreiben verhindern willst, dann gib den Fenstern doch Titel, die vorhersehbar sind, also nicht auf die Array-Größe basieren, sondern auf dem was sie anzeigen. So kannst du suchen, ob es ein derartiges Fenster schon gibt.
MfG
Rouven
Hi,
du könntest zum Beispiel mit assoziativen Arrays arbeiten, die sind nicht mit Zahlen sondern z.B. mit Zeichenketten oder Objekten indiziert.
Wenn du ein Fenster nach "link2.html" aufmachst, dann setzt du in das Arrays z.B. sowas:
meineFenster["link2"] = window.open...
Das Öffnen kannst du auch in einen Einzeiler verwandeln:
var zuZeigendesFensters = (meineFenster["link2"] != null) ? meinFenster["link2"] : window.open(....)
Was hier verwendet wird ist eine Kurzschreibweise von IF-THEN-ELSE. Bei dieser Konstruktion aber nicht vergessen, das Fenster trotzdem zu sichern:
meineFenster["link2"] = zuZeigendesFenster;
Damit ist die Effizienz der Kurzschreibweise dahin und ein normales if-else wäre etwa genau so gut...
MfG
Rouven
Meinst du so:
var meineFenster = [];
function popup1() {
var zuZeigendesFensters = (meineFenster["link1"] != null) ? meinFenster["link1"] : window.open("link1.html", "_popup_"+popups.length, "directories=no,menubar=no,status=no,scrollbars=no,width=240,height=270");
meineFenster["link1"] = zuZeigendesFenster;
}
function popup2() {
var zuZeigendesFensters = (meineFenster["link2"] != null) ? meinFenster["link2"] : window.open("link2.html", "_popup_"+popups.length, "directories=no,menubar=no,status=no,scrollbars=no,width=240,height=270");
meineFenster["link2"] = zuZeigendesFenster;
}
Viele Grüße
Sven
Hi,
du könntest zum Beispiel mit assoziativen Arrays arbeiten, die sind nicht mit Zahlen sondern z.B. mit Zeichenketten oder Objekten indiziert.
Wenn du ein Fenster nach "link2.html" aufmachst, dann setzt du in das Arrays z.B. sowas:
meineFenster["link2"] = window.open...Das Öffnen kannst du auch in einen Einzeiler verwandeln:
var zuZeigendesFensters = (meineFenster["link2"] != null) ? meinFenster["link2"] : window.open(....)
Was hier verwendet wird ist eine Kurzschreibweise von IF-THEN-ELSE. Bei dieser Konstruktion aber nicht vergessen, das Fenster trotzdem zu sichern:
meineFenster["link2"] = zuZeigendesFenster;
Damit ist die Effizienz der Kurzschreibweise dahin und ein normales if-else wäre etwa genau so gut...MfG
Rouven
Hi
var meineFenster = [];
Diese Schreibweise kenne ich nicht. Nimm new Array();
Gedacht hab ich mir das in etwa so:
---------------------------------------------------
<html>
<head>
<script type="text/javascript">
var fenster = new Array();
function focusAll() {
for (var fenstername in fenster)
fenster[fenstername].focus();
}
function popup1() {
fenster["fenster1"] = ((fenster["fenster1"] != null) && (!fenster["fenster1"].closed)) ? fenster["fenster1"] : window.open("http://www.google.de", "fenster1", "top=100,left=100,height=200,width=200");
focusAll();
}
function popup2() {
fenster["fenster2"] = ((fenster["fenster2"] != null) && (!fenster["fenster2"].closed)) ? fenster["fenster2"] : window.open("http://www.heise.de", "fenster2", "top=300,left=300,height=200,width=200");
focusAll();
}
</script>
</head>
<body>
<a href="#" onclick="popup1(); return false;">Fenster1</a>
<a href="#" onclick="popup2(); return false;">Fenster2</a>
</body>
</html>
----------------------------------------------------------------
Na ja, nur schöner :-)
MfG
Rouven
Hallo Rouven.
var meineFenster = [];
Diese Schreibweise kenne ich nicht. Nimm new Array();
Beides ist korret, siehe [Wikipedia: Javascript#Array].
Einen schönen Montag noch.
Gruß, Ashura
Spitze, dass funktioniert echt super! Genauso habe ich mir das vorgestellt.
Viele Grüße
Sven
Hallo,
das Fenster kennt die .focus()-Methode, mit der man es in den Vordergrund befördern kann. Du müsstest dir also irgendwo alle geöffneten Fenster merken (=Rückgabe des .open-Befehls), und dann alle durchgehen und .focus() aufrufen.
sehr schön - und das letzte von diesen Popups ist dann wirklich im Vordergrund. Vergiss bitte nicht, dass immer nur genau ein Fenster den Focus haben kann. Mit dem Setzen des Focus auf ein bestimmtes Fenster verliert ihn automatsich das vorher aktive Fenster.
Das kann's also nicht sein.
So long,
Martin
Das ist richtig, ohne Zweifel, aber das lässt sich dann durch eine Anordnung der Fensterpositionen verschieben und war _so_ nicht gefordert. Wofür es aber sorgt, ist das die Browser-Fenster die x vordersten Fenster sind und sämtliche anderen Applikationen im Hintergrund verschwinden.
MfG
Rouven
Hi,
wenn du ein popup aufmachst, bekommst du ja eine referenz auf das fenster geliefert. Diese Refeenzen koenntest du ja in einem array speichern.
zum thema referenz und open(): http://de.selfhtml.org/javascript/objekte/window.htm#open
den focus kannst du dann mit javascript focus() setzen:
<script type="text/Javascript" language="JavaScript">
<!--
document.getElementById("XXXXX").focus();
//-->
</script>
so, die Antwort war zwar nicht sehr detailiert, sollte dich aber weiterbringen. ;-)