Supportnet Computer
Planet of Tech

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

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:

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"]
lauten

Antwort 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

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 false
aber
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:

<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)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: