Hallo Roland,
Zustimmung! (Der eigentliche Sinn dieses Postings, damit Du nicht auf die Idee kommst, ich widerspreche Dir aus Prinzip ;-))
:-), ich habe doch auf deinen Kommentar gewartet :-)
Und den ungeuebten Blick kann das eval() evtl. auch ein wenig verwirren.
x = 42; y = 84;
str = "z = y - x"; x -= 28;
str += "-16";
eval(str); alert(z); // was steht in z?
z=54 84-(42-28)-16=54 :-)
Das void() in menu.html verhindert, das der Navigator komische Sachen macht. *g* Er schreibt sonst den Dateinamen in das Fenster der menu.html, nachdem er im oberen Frame ganz richtig die location gewechselt hat. Ein darauffolgendes view source auf den Menu frame ist einfach nur... seltsam. Nehme ich jetzt mal als Bug hin.
Es liegt daran, daß gleichzeitig der Link ausgeführt wird. Da gleiche Problem existiert bei window.open() hinter href. Siehe dazu auch <../../sfausles/tsfa_tcd.htm#a3>
Ich habe mir überlegt, daß dieses ja auch für normale framefreie Fenster gelten müßte, die von einer Seite geöffnet werden. Dies ist auch tatsächlich so. Der gleiche Aufruf (Fenster wurde natürlich vorher geöffnet) jedoch diesmal mit einer Fenstervariablen als Übergabewert, ändert ein geöffnetes Fenster.
Verstehe ich nicht. Meinst Du sowas?
wnd = window.open(some_url, some_name, some_options);
wnd.location.href = some_other_url;
Falls es das war, muss ich jetzt aber sagen, dass mich das nicht vom Hocker haut. ;-)
Nein, ich habe festgestellt, das man über parent auch beliebige Fenster ansprechen kann, die vom Hauptframe geöffnet werden.
Hier mal die Dateien dazu, ich habe bequemerweise gleich deine genutzt:
index.htm:
<html>
<head>
<script language="JavaScript">
<!--
abc=window.open("5.html","abc1");
//-->
</script>
</head>
<frameset cols="20%,40%,40%" >
<frame src="menu1.html" name="links">
<frame src="1.html" name="mitte">
<frame src="2.html" name="rechts">
</frameset>
</html>
menui.html
<html>
<head>
<script language="JavaScript">
<!--
if (parent.window.length==0) {abc=window.open("1.html","abc1");
mitte=window.open("2.html","mitte1");
rechts=window.open("3.html","rechts1"); }
alert(parent.window.length); /*mittlerweile habe ich herausgefunden, daß sogar das geht*/
function twoWins(target1, url1, target2, url2)
{
parent[target1].location.href = url1;
parent[target2].location.href = url2;
parent[target2].focus();
}
//-->
</script>
<title>Menuedatei 2</title>
</head>
<body>
<p><a href="javascript:twoWins('rechts','4.html','mitte','5.html');">Frames werden geändert</a></p><br>
<p><a href="javascript:twoWins('rechts','1.html','abc','3.html');">Frame und Fenster "abc" wird geändert</a></p><br>
<p><a href="javascript:twoWins('rechts','2.html','mitte','1.html');">Frames werden geändert</a></p>
</body>
</html>
Diese Datei spricht jetzt Fenster im Frame oder vom Elternframe geöffnete Fenster bzw. von der Seite neu geöffnete Fenster mit der gleichen Fenstervariablen an.
Außerhalb des Frames werden vorher die Fenster geöffnet und dann mit dem gleichen Aufruf angesprochen. Es spielt keine Rolle, ob sich die Seite im Frame oder nicht befindet. Parent gilt also für frames und normale Fenster gleichen Namens.
Daraus habe ich geschlußfolgert, daß es auch eine parent.window.length - Eigenschaft geben muß. Und siehe da, es gibt diese Eigenschaft. Sie gibt im Frame parent.frame.length zurück und außerhalb den Wert 0.
Ich habe mal diese Seiten auf den Server gestellt, damit man dieses Verhalten sehen kann.
http://pc-anfaenger.de/pca/test/index.htm
und http://pc-anfaenger.de/pca/test/menue1.html
alles in allem ist frames wohl eine überflüssige Bezeichnung.
Ist das ok so mit den Ergaenzungen? Dabei wollte ich doch eigentlich nur das mit der Zustimmung schreiben... *g*
Aber sicher doch und die von Cir auch. :-)
P.S. Alles getestet mit Netscape 4.08 [en] WinNT.
und ich mit dem IE 5 und dem Navi 4.5
P.P.S. Und das ist der Beweis, dass auch die zum tausendsten mal gestellten Fragen durchaus auch mal einen interessanten Thread hervorbringen koennen. :-)
dem stimme ich vollkommen zu :-)
(P.)*4.S. Jetzt reicht so ein Bier schon nicht mal mehr fuer ein ganzes Posting!
<g> bei mir würde es für 100 reichen :-), bei Wein wäre die Sache anders.
Viele Grüße
Antje