molily: ansprechen eines popups, wenn eltern veraendert werden

Beitrag lesen

Hallo ruedi,

ich wollte in erster linie erreichen, dass bei mainframe-refresh auch das popup aktualisiert wird, aber kein neues geoeffnet wird, wenn es zu ist.

Wieso lässt du es zu, dass über mehrere Dokumente hinweg mehrere Fenster gleichzeitig offen sind?

wie frage ich den browser, ob es dieses fenster schon gibt?

Speichere die Fensterreferenz im Frameset-Dokument ab. Da das Frameset selbst unverändert bleibt, während sich der Inhaltsframe mit der jeweiligen Standortbeschreibung ändert, kannst du dort die Fensterreferenz ablegen.

if (fakten.closed() == true) funktioniert naemlich nicht, wenn der mainframe (elternframe) geaendert wurde.

Das kann auch gar nicht funktionieren, da kein Objekt namens Fenster existiert, da du kein solches angelegt hast, weil du den Rückgabewert von window.open() nirgendwo abspeicherst, beispielweise:

var fakten=window.open('[URL]', 'fakten');

Das steht im von dir offenbar erwähnten Artikel http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/.

Außerdem ist closed eine Eigenschaft, keine Methode, also wenn, dann »if (fakten.closed) ...«.

im tipps-und-tricks-bereich steht sogar ein workaround fuer den fall, dass sich der mainframe aendert und sich das kind evtl. nicht mehr an seinen vater erinnert.

Ehrlich gesagt finde ich dein Konzept zweifelhaft. Ich würde simpelst das Faktenfenster automatisch schließen, wenn der Besucher einen anderen Standort oder eine andere Rubrik anwählt. Mit dem Event-Handler onunload könntest du das Fenster schließen, wenn das Dokument verlassen wird.

hier benutzte ich (nicht lachen), die in selfhtml erklaerte methode, den window.name eines sich nicht veraendernden frames als variablenuebergabeplatz (fakten='open' oder fakten='closed') zu verwenden.

Das ist unnötig, du kannst die Fensterreferenz wie gesagt im Frameset-Dokument speichern. Über parent kannst du auf das window-Objekt des Framesets zugreifen.

wenn ich per target oder window.open eine datei hineinlade, weiss der doch auch, dass das fenster da ist, und wenn er das fenster nicht kennt, macht er eins auf, das so heisst.

wie frage ich nach der existenz eines fensters?

Auch wenn die Frage ob meiner anderen Hinweise nicht mehr relevant ist:
Wenn du nur den Fensternamen kennst, bleibt dir meines Wissens nichts anderes übrig, als ein Popup gleichen Namens noch einmal zu öffnen - so stellst du die Verbindung zum eventuell schon offenen gleichnamigen Fenster her - und es dann zu schließen.

ich merkte naemlich, dass sich mein aufgemachtes popup in keinem fall per name ansprechen laesst. (...) alle anderen frames im set kann ich von diesem frame aus veraendern, nur das popup nicht.

Siehe oben, du hast die Fensterreferenz weder für das Dokument selbst noch für über mehrere Dokumente hinweg gespeichert.

ich erinnerte mich, dass netscape mac frueher (3 oder 4) ein problem hatte, sich framenamen zu merken, aber hier ist es auf ie 5 und auch auf windows mit ie 5 und netscape 6 dasselbe.
fakten is not defined. obwohl ich ihn im selben frame aufgemacht und benamt habe.

Das dürfte damit gar nichts zu tun haben. Wenn du ein Fenster so öffnest:
window.open('bla.html', 'meinfenster');
Kannst du nicht so darauf zugreifen:
window.alert(window.meinfenster);
(Gibt »undefined« aus, weil kein Objekt dieses Namens existiert.)

Abgesehen davon solltest du eine neuere Mozilla/Gecko-Version verwenden als Netscape 6 zugrunde liegt.

die loesung, per window.open eine neue datei hineinzuschicken, die onload=self.close() veranstaltet, kann nicht w3c-konform empfohlen sein, oder??

Innerhalb deines jetzigen Konzepts ist es nur logisch. Da die komplette Seite sowieso nicht W3C-konform ist, dürfte das nicht ausschlaggebend sein, aber konkret wüsste ich nicht, was daran immanent nicht valide sein *könnte*.

Eine Beispiellösung, die wie oben beschrieben die Fensterreferenz im parent-Frameset ablegt:

Frameset http://home.t-online.de/home/dj5nu/fanhost/tec-frameset.html (hier klicken ;))

Unterseite http://home.t-online.de/home/dj5nu/fanhost/tec-seite.html
Popup-Seite http://home.t-online.de/home/dj5nu/fanhost/tec-popup.html

Der Code ist primitiv gehalten und nicht valide, die JavaScript-Aufrufe sind auch nicht kompatibel eingebaut.

Öffne testweise das Fenster, lade die Unterseite über den Reload-Link neu (dadurch ginge die Verbindung zum Fenster verloren). In das Fenster sollte beim Neuladen tec-popup.html geladen werden (es kann auch fokussiert werden, die Codezeile ist auskommentiert). Versuche dann das Fenster zu Schließen. Wenn du das Frameset verlässt, wird das eventuell noch offene Fenster geschlossen.

Ähnlich kannst du dein System realisieren - wobei ich es wie gesagt anders lösen würde. Aber dann würde ich sowieso die Seite umstrukturieren.

Bitte lies auch http://home.t-online.de/home/dj5nu/js-popup.html. Momentan funktioniert deine Seite aber selbst abgesehen von den Popups nicht ohne JavaScript. Zu der Seite generell könnte viel gesagt werden... Wenn du noch Tipps möchtest, kannst du sie ja bspw. in einem »Bewertungs«-Thread vorstellen.

Grüße,
Mathias

--
»In anderen Newsgroups werden Pseudonyme akzeptiert, es handelt sich dabei meist um Gruppen, in denen sensible Themen (z.B. psychische oder peinliche Erkrankungen o.ä.) behandelt werden.«