Discussion:
Prüfung ob Fenster geöffnet
(zu alt für eine Antwort)
Sven Jacobs
2004-08-11 07:59:03 UTC
Permalink
Hallo zusammen!

Ich möchte in JavaScript prüfen, ob ein Popup-Fenster bereits geöffnet
wurde. Das Problem ist nun, dass ich die Prüfung von einem Browser-Fenster
aus machen möchte, welches völlig unabhängig von dem Browser-Fenster ist,
welches das Popup geöffnet hat. Das heisst, dass es sich nicht in einem
Frame-Set befindet oder ein Child-Window ist. Ausserdem gehen jegliche
Informationen bezüglich des Popup-Window verloren, wenn das Browser-Fenster
z.B. neu geladen wird.

Mit

self.name = 'popupWindow';

setze ich im Popup-Fenster den Namen. Somit kann ich es schon mal eindeutig
identifizieren. Nun brauche ich eine Referenz auf dieses Fenster. Wenn ich
ein window.open aufrufe, ohne eine URL anzugeben uns als Target den Namen
des Popup-Fenster, bekomme ich eine Referenz zurück und es wird kein neues
Fenster geöffnet ... ABER NUR, wenn das Fenster existiert, also geöffnet
ist!

win = window.open('', 'popupWindow');'

Ist das Fenster nicht geöffnet, so öffnet sich (zumindest im Mozilla) ein
neues leeres Fenster. Der Effekt ist natürlich unerwünscht. Ich könnte zwar
das Fenster sofort wieder schließen, aber das sieht natürlich auch sehr
unschön aus...

Wenn es denn so wie gewünscht klappen würde, sähe der Code etwa so aus:

1 win = window.open('', 'popupWindow');
2
3 if (win)
4 {
5 // Das Fenster ist bereits geöffnet,
6 // muss nicht nochmal geöffnet werden
7 }
8 else
9 {
10 // Das Fenster ist nicht geöffnet, also öffnen
11 window.open('irgendwas.html', 'popupWindow');
12 }

Das Problem liegt jedoch schon in Zeile 1 :(
Wie komme ich also an das Fenster heran?

Vielen Dank!
--
MfG
Sven Jacobs
Dietmar Meier
2004-08-11 10:26:06 UTC
Permalink
Post by Sven Jacobs
Ich möchte in JavaScript prüfen, ob ein Popup-Fenster bereits geöffnet
wurde. [...]
Alles, was Du da schreibst ist genau richtig[tm], so dass Du ...
Post by Sven Jacobs
Ist das Fenster nicht geöffnet, so öffnet sich (zumindest im Mozilla)
ein neues leeres Fenster. Der Effekt ist natürlich unerwünscht.
... um diesen Effekt nicht herumkommen wirst. Allerdings solltest Du
ohnehin alle Popups genau jetzt vergessen: gestern ist XP SP2 verfügbar
geworden und somit werden nun auf aktualisierten Systemen beim "immer
noch" meistverwendeten Brauser MSIE per default Popups geblockt, sofern
sie nicht aufgrund einer Benutzeraktion (bspw. in einem click-Handler)
geöffnet werden. Prognose: Popups werden nun endlich aussterben.

ciao, dhgm
Sven Jacobs
2004-08-11 10:40:24 UTC
Permalink
Post by Dietmar Meier
... um diesen Effekt nicht herumkommen wirst. Allerdings solltest Du
ohnehin alle Popups genau jetzt vergessen: gestern ist XP SP2 verfügbar
geworden und somit werden nun auf aktualisierten Systemen beim "immer
noch" meistverwendeten Brauser MSIE per default Popups geblockt, sofern
sie nicht aufgrund einer Benutzeraktion (bspw. in einem click-Handler)
geöffnet werden. Prognose: Popups werden nun endlich aussterben.
Popups können durchaus auch sehr nützlich sein! Z.B. als Hinweis-Fenster,
dass der Benutzer eine neue Mail bekommen hat, oder irgend so was... Um
lästige Werbe-Popups zu unterbinden, ist diese neue Funktion des XP SP2
sicherlich willkommen.
--
MfG
Sven Jacobs
Dietmar Meier
2004-08-11 11:21:59 UTC
Permalink
Popups können durchaus auch sehr nützlich sein! [...]
Ganz prinzipiell: Nein.
Um lästige Werbe-Popups zu unterbinden, ist diese
neue Funktion des XP SP2 sicherlich willkommen.
Diese Unterscheidung müsste der Benutzer vornehmen. Ich nehme
an, dass ein Großteil der Benutzer aber die Defaulteinstellung
beibehalten wird.

ciao, dhgm
Bernd Muent
2004-08-11 12:21:24 UTC
Permalink
Post by Dietmar Meier
Prognose: Popups werden nun endlich aussterben.
Leider zu optimistisch. Ich würde sagen: Popups werden sich zu "div"s
wandeln, die eingeblendet werden mit einem Kreuz zum Wegklicken oben
rechts wenn man Glück hat.
Da haben sich die Werbeleute doch was einfallen lassen. Siehe viele
Portale wie z.B. sport1.de und GMX macht das seit ein paar Tagen auch
so. Da hilft ein Popup-Blocker leider garnichts mehr :-(
Würde mich ja freuen, wenn du recht behälst, aber "allein mir fehlt der
Glaube" (um Faust zu zitieren!).

Sonnige Grüsse, Bernd
--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: ***@bmservices.de
Dietmar Meier
2004-08-11 12:35:45 UTC
Permalink
Post by Bernd Muent
Post by Dietmar Meier
Prognose: Popups werden nun endlich aussterben.
Leider zu optimistisch. Ich würde sagen: Popups werden sich zu "div"s
wandeln, die eingeblendet werden mit einem Kreuz zum Wegklicken oben
rechts wenn man Glück hat.
Natürlich, das ist ja, wie Du schreibst, schon seit einer Weile
allerortens zu betrachten. Diese Divs beschränken sich jedoch innerhalb
des aktuell angezeigten Fensters, das heißt zum einen, dass sie die
Funktionalität desselben beeinträchtigen, bis sie weggeklickt werden
(welcher Anbieter wird das auf Dauer haben wollen?) und zum anderen,
dass sie beim Schließen des Fensters zuverlässig verschwinden und nicht
noch ohne Fokus im Hintergrund lauern.

ciao, dhgm

Martin Honnen
2004-08-11 10:29:28 UTC
Permalink
Post by Sven Jacobs
Mit
self.name = 'popupWindow';
setze ich im Popup-Fenster den Namen. Somit kann ich es schon mal eindeutig
identifizieren.
Nicht wirklich, der Name 'popupWindow' ist nicht sonderlich einzigartig.
Und warum setzt du den Namen nicht schon beim Oeffnen also
window.open('whatever.html', 'popupWindow')
dann ist die Zuweisung zu self.name nicht noetig.
Post by Sven Jacobs
Ist das Fenster nicht geöffnet, so öffnet sich (zumindest im Mozilla) ein
neues leeres Fenster. Der Effekt ist natürlich unerwünscht. Ich könnte zwar
das Fenster sofort wieder schließen, aber das sieht natürlich auch sehr
unschön aus...
Du hast richtig erkannt und richtig geschlussfolgert, was moeglich ist,
es gibt in Browsern keine globale Liste aller Fenster oder eine
aehnliche API, die es dir oder anderen erlaubte, auf die Existenz eines
Fenster zu schliessen.
--
Martin Honnen
http://JavaScript.FAQTs.com/
Sven Jacobs
2004-08-11 10:46:03 UTC
Permalink
Post by Martin Honnen
Nicht wirklich, der Name 'popupWindow' ist nicht sonderlich einzigartig.
Und warum setzt du den Namen nicht schon beim Oeffnen also
window.open('whatever.html', 'popupWindow')
dann ist die Zuweisung zu self.name nicht noetig.
Das war ja auch nur ein vereinfachtes Beispiel ;) Die Praxis sieht etwas
anders aus. Dort möchte ich nämlich aus einem Popup heraus einen Link in
dem Hauptfenster der Website öffnen. Das Hauptfenster wurde natürlich nicht
über window.open() geöffnet, sondern durch Eingabe der URL im Browser.
Somit setze ich dort den Namen des Fensters über self.name. Mit
window.opener kann ich im Popup übrigens nicht arbeiten, da dass Popup
unter anderem auch von einem weiteren Popup geöffnet worden sein kann. Der
Link soll aber immer im Hauptfenster geladen werden.
Post by Martin Honnen
Du hast richtig erkannt und richtig geschlussfolgert, was moeglich ist,
es gibt in Browsern keine globale Liste aller Fenster oder eine
aehnliche API, die es dir oder anderen erlaubte, auf die Existenz eines
Fenster zu schliessen.
Das ist schade. So eine API wäre aber durchaus sinnvoll, oder nicht?
Natürlich ausreichend abgesichert, so dass ein Fenster z.B. nur auf Fenster
der selben Domain zugreifen darf...
--
MfG
Sven Jacobs
Dietmar Meier
2004-08-11 11:20:30 UTC
Permalink
Mit window.opener kann ich im Popup übrigens
nicht arbeiten, da dass Popup unter anderem auch von einem weiteren
Popup geöffnet worden sein kann. Der Link soll aber immer im
Hauptfenster geladen werden.
Dann verwende beim Öffnen des Popups 2 aus dem Popup 1 sowas:

var anotherPopup = window.open(...);
if (anotherPopup && self.opener && !self.opener.closed)
anotherPopup.opener = self.opener;

Nun sollte im Popup 2 die opener-Eigenschaft auf das
gewünschte Fenster zeigen.

ciao, dhgm
Lesen Sie weiter auf narkive:
Loading...