Zwei Objektebenen nutzen das selbe javascript
Daniel
- dhtml
Hallo
Ich habe mich in letzter Zeit ein wenig mit javascript und VRML beschäftigt und frage mich, wie es möglich ist, das ich eine Schnittstelle zwischen meiner VRML-Welt und meiner html-Seite aufbauen kann.
Folgendes soll zum Beispiel passieren. In der VRML-Datei bewege ich mich umher und auf der HTML-Seite wird angezeigt, wo ich bin.
Mein Problem ist, das ich die VMRL-Datei nicht dazu bekomme, dass sie das gleiche Javascript verwendet, das meine HTML-Seite verwendet.
***WER SICH NICHT MIT VRML AUSKENNT***
kann mir als Beispiel auch erklähren, wie es möglich ist, zwei Browserfenster miteinander kommunizieren zu lassen. Aber bitte kein JAVA ( :-( ich komm mit SDK nicht klar ).
Ich danke Euch schonmal im Voraus! Wenn Ihr Beispiele habt, könnt Ihr sie mir auch per Email senden (daau@gmx.de).
Daniel
PS: Wenn Ihr ein Beispiel sehen wollt, was ich meine, dann geht doch mal auf www.parallelgraphics.com/mir (ich hoffe, ich darf Hyperlinks angeben - ist aber keine Seite von mir -leider, die ist nämlich gut- ) und dann auf the end of mir. Achtung: Der läd ein vrml-Plugin runter, wenn Ihr keins habt (für die Leute, die allergisch gegen PlugIns sind :-)). Rechts seht Ihr dann eine Tabelle, die Werte aus der VRML-Datei anzeigt.
Hi,
» ***WER SICH NICHT MIT VRML AUSKENNT***
<meld>
kann mir als Beispiel auch erklähren, wie es möglich ist, zwei Browserfenster miteinander kommunizieren zu lassen.
gehen wir mal davon aus, dass zwei browserfenster genau wie zwei frames eben nur "window" objekte sind. Gehen wir fernen davon aus, dass es keine Sicherheitsbeschränkungen wie anderes Protokolle, unterschiedliche Domains etc. zwischen diesen Fenstern gibt, sonst klappt das sowieso nicht. Gleiches betrifft auch ggf. die Herkunft der VRML-Datei und dem sie umgebenden HTML-Dokument (Container).
An so ein "window" objekt kannst du allerlei informationen "ranhängen", auch Funktionen.
Wenn nicht "sowieso schon möglich" (hatte mal eine Situation wo's ging, mag aber Zufall oder auch schlicht ein Fehler gewesen sein oder ich hab was durchheinander gebracht<g>), kannst du z.b über die .opener Eigenschaft des zweiten Fensters die Funktionen und Egenschaften, die dort definiert wurden per
window.opener.funktionsname()
window.opener.eigenschaft
bzw. allgemein gesprochen
windowObject_Variable.funktionsname()
windowObject_Variable.eigenschaft
aufrufen und ansprechen, ansonsten wie folgt:
(und das ging eigentlich immer)
datei1.html ("browserfenster 1")
-----------
<html>
<head>
<script>
function sagwas(gaga) {
alert(gaga);
}
// funktion an das "window" dranhängen, welches die js läd
// z.B."browserfenster 1"
window.sagMama=sagwas;
babywin = window.open("datei2.html", "babywin");
// als Beispiel eine neue Eigenschaft
window.neueProppy = "Hallo mein Kind"
</script>
</head>
<body>
Mama fenster
</body>
datei2.html (babywin in "browserfenster 2"):
-----------
<html>
<head>
<script>
function sagmama() {
window.opener.sagMama("Externe Funktion:\n\tMaaammaa!!!");
self.focus();
alert("User-Property:\n\twindow.opener.neueProppy);
}
</script>
</head>
<body onload="sagmama()">
Baby fenster
</body>
Das obige hab ich mal in NS6 getestet, sollte aber (da "reines" JavaScript) auch in IE4+ und in NS4 laufen.
Das Prinzip sollte damit wohl klar sein.
Ob Du von der VRML-Datei grundsätzlich auf Objekte des "Container-Fensters" zugreifen kannst weiss ich nicht. Wenn du aber irgendwie auf das "JavaScript window Objekt" Zugriff hast, spricht eigentlich nichts dagegen.
Da die VRML in einem PlugIn/ActiveX rennt müsstest du ggf. über irgendeine "document", "window" oder "parent"-Eigenschaft von diesem PlugIn an die Inhalte der Hauptdatei und dem entsprechenden window-Objekt gelangen. Dann "sollte" es funktionieren.
Viel Spaß
CirTap
Danke erstmal. Das klappt soweit und ich habe es auch bestmöglichst verstanden. Aber ich kann es nicht umschreiben für VRML - Du hattest am Ende etwas von parent erwähnt - wo kann ich mich ein bischen darüber informieren? Gibt es da etwas im www?
Es ist ne schwere Geburt, aber ich denke mal, das es echt cool wird, wenn es klappt :-)
Trotzdem, danke für Deinen ausführlichen Tip, es hat mich, was das Verständnis für die Sachen angeht echt weiter gebracht.
Daniel