Supportnet / Forum / Skripte(PHP,ASP,Perl...)
javascript Menu
Frage
Hallo,
Weiß jemand eine Lösung für folgendes Problem:
in einem Frame befindet sich ein Tree Menu (sieht aus wie das im Win Explorer; Doku: http://www.destroydrop.com/javascripts/tree/).
Das Menu ist in etwas so aufgebaut:
[code]a = new dTree(´a´);
a.add(1, 0,´Node 13´,´index.html´);
a.add(2, 1,´Node 14´,´afdsf.html´);
document.write(a);[/code]
Mit der Methode [quote]a.openTo(13,true)
[/quote] lässt sich ein bestimmter Knoten des Menüs öffnen.
Nun ist meine Frage wie kann ich diese Methode aus einem zweiten Framefenster auf den Baum anwenden, um z.B. beim Öffnen einer bestimmten Seite, den dazugehörigen Knoten im Menu zu öffnen.
Danke für Eure Antworen
Antwort 1 von ClemBra
Frame-Übergreifende Funktionsaufrufe gehen normalerweise über
Allerdings sperren manche Browser diese Möglichkeit um Phishing vorzubeugen, andere lassen nur Änderungen zu, wenn beide Seiten vom gleichen Server kommen.
Wobei ich in Zeiten von php keine sinnvolle Anwendung von Frames sehe.
parent.tree_frame.a.openTo(13, true);
Allerdings sperren manche Browser diese Möglichkeit um Phishing vorzubeugen, andere lassen nur Änderungen zu, wenn beide Seiten vom gleichen Server kommen.
Wobei ich in Zeiten von php keine sinnvolle Anwendung von Frames sehe.
Antwort 2 von rfb
um Fehlermeldungen zu vermeiden sollte die Abfrage besser so aussehen:
bei einem derartig wackeligem Konstrukt wie JavaScript in Verbindung mit Frames immer erst einmal nachfragen ob die entsprechende Funktion und das Fenster überhaupt existieren. Dann wird - falls irgendwas davon gerade mal nicht verfügbar ist - schlimmstenfalls eben nix gemacht, das ist allemal besser als die Fehlerkonsole des IE (oder die entsprechenden Mitteilungsfenster anderer Browser) zu starten.
Mehr Tipps hierzu: Barrierefreies JavaScript
if (parent["tree_frame"] && parent["tree_frame"].a && parent["tree_frame"].a.openTo()) { parent["tree_frame"].a.openTo(13, true);
]bei einem derartig wackeligem Konstrukt wie JavaScript in Verbindung mit Frames immer erst einmal nachfragen ob die entsprechende Funktion und das Fenster überhaupt existieren. Dann wird - falls irgendwas davon gerade mal nicht verfügbar ist - schlimmstenfalls eben nix gemacht, das ist allemal besser als die Fehlerkonsole des IE (oder die entsprechenden Mitteilungsfenster anderer Browser) zu starten.
Mehr Tipps hierzu: Barrierefreies JavaScript
Antwort 3 von rfb
sorry, kleiner Fehler, es muss natürlich jeweils
parent.frames["tree_frame"] lautenAntwort 4 von luca
Hallo,
Danke für Eure Antworten, die Sache funktioniert nun soweit.
@ClemBra: die Sache mit den Frames hab ich nicht verbrochen. War schon so.
@rfb:
Ich hab jetzt kein Plan von JS:
Macht das jetzt (in diesem Fall) einen Unterschied ob ich
oder einfach zu Beginn der Html Seite diesen Text reinpaste:
<script language="JavaScript" type="text/javascript" src="file.js">
if (parent["tree_frame"] && parent["tree_frame"].a && parent["tree_frame"].a.openTo()) { parent["tree_frame"].a.openTo(13, true); }
</script>
PS:
aber
Danke für Eure Antworten, die Sache funktioniert nun soweit.
@ClemBra: die Sache mit den Frames hab ich nicht verbrochen. War schon so.
@rfb:
Ich hab jetzt kein Plan von JS:
Macht das jetzt (in diesem Fall) einen Unterschied ob ich
body onload="javascript:parent..." oder einfach zu Beginn der Html Seite diesen Text reinpaste:
<script language="JavaScript" type="text/javascript" src="file.js">
if (parent["tree_frame"] && parent["tree_frame"].a && parent["tree_frame"].a.openTo()) { parent["tree_frame"].a.openTo(13, true); }
</script>
PS:
a.openTo() in dier IF-Anweisung ergibt jetzt immer falseaber
a.openTo scheint zu gehen.Antwort 5 von rfb
Dere Unterschied ist, dass JavaScript im Body-Tag unübersichtlich ist und komplexere Funktionen dort keinen Platz haben.
Zu deinen Code-Schnipseln:
bei body onload="javascript:parent..." ist das Wort javascript: überflüssig
bei
<script language="JavaScript" type="text/javascript" src="file.js">
if (parent["tree_frame"] && parent["tree_frame"].a && parent["tree_frame"].a.openTo()) { parent["tree_fra[/i]me"].a.openTo(13, true); }
</script>
das sollte eigentlich gar nicht funktionieren, da der JavaScript-Interpreter vorrangig die Datei file.js suchen und ausführen soll und den Kram zwischen <script ...> und </script> dafür ignoriert.
Die Klammern () kannst du weglassen, ansonsten beachte mein 2tes Posting.
Es sollte mit einem onload-Event so aussehen:
Wenn zusätzlich das externe Script geladen werden soll, setz das in eine eigene Zeile:
(ob davor oder danach hängt vom Inhalt ab)
Zu deinen Code-Schnipseln:
bei body onload="javascript:parent..." ist das Wort javascript: überflüssig
bei
<script language="JavaScript" type="text/javascript" src="file.js">
if (parent["tree_frame"] && parent["tree_frame"].a && parent["tree_frame"].a.openTo()) { parent["tree_fra[/i]me"].a.openTo(13, true); }
</script>
das sollte eigentlich gar nicht funktionieren, da der JavaScript-Interpreter vorrangig die Datei file.js suchen und ausführen soll und den Kram zwischen <script ...> und </script> dafür ignoriert.
Die Klammern () kannst du weglassen, ansonsten beachte mein 2tes Posting.
Es sollte mit einem onload-Event so aussehen:
<script type="text/javascript">
function baum() {
if (parent.frames["tree_frame"] && parent.frames["tree_frame"].a && parent.frames["tree_frame"].a.openTo) { parent.frames["tree_frame"].a.openTo(13, true);
}
}
window.onload=baum;
</script>
Wenn zusätzlich das externe Script geladen werden soll, setz das in eine eigene Zeile:
<script type="text/javascript" src="file.js"></script>(ob davor oder danach hängt vom Inhalt ab)

