JavaScript kennt Objekt noch nicht
t0bias
- javascript
Hi,
ich habe folgende HTML-Seite erstellt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>CreativeCompartment Homebase</title>
<script type="text/javascript">
function sound() {
alert('Sound function goes here...');
alert(Panorama.getPan());
}
function computing() {
alert('Computing function goes here...');
}
function graphics() {
alert('Graphics function goes here...');
}
function mail() {
alert('Mail function goes here...');
}
</script>
<style type="text/css" title="Default">
body, div, h1, h2, h3, span, p {
font-family: Verdana,Arial,Helvetica,sans-serif;
color: #000000;
}
body {
font-size: 10pt;
background : #ffffff;
}
table,tr,td {
font-size: 10pt;
border-color : #777777;
background : #dddddd;
color: #000000;
border-style : solid;
border-width : 1px;
}
h1 {
font-size: 18pt;
}
h2 {
font-size: 14pt;
}
.warning {
font-weight: bold;
}
</style>
</head>
<body>
<div id="FlashBase" style="position:absolute; left:50%; top:50%; width:720px; height:480px; margin-top:-240px; margin-left:-360px;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
id="Panorama"
width="720" height="480" >
<param name="movie" value="Panorama.swf">
<param name="FlashVars" value="externalinterface=1">
<param name="pan" value="22">
<embed width="720" height="480"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash"
name="Panorama"
src="Panorama.swf"
FlashVars="externalinterface=1"
pan="22"
/>
</object></div>
<a onClick="Panorama.moveTo(-30,0,70,10);" href="#">Move To Sound</a>
<a onClick="Panorama.moveTo(45,0,70,10);" href="#">Move To Computing</a>
<a onClick="Panorama.moveTo(-230,0,70,10);" href="#">Move To Graphics</a>
<a onClick="Panorama.moveTo(-170,0,70,10);" href="#">Move To Mail</a>
</body>
</html>
Die einzelnen Funktionen werden aus dem Flash-Panorama heraus korrekt aufgerufen, d.h. die alert-Boxen erscheinen. Die Links, die auf das Objekt "Panorama" zugreiffen funktionieren auch, nur die Zugriffe auf das Panorama-Objekt aus den Funktionen heraus klappen nicht, ich gehen einmal davon aus,
dass dies der Fall ist, weil der Browser zum Zeitpunkt des Ladens das Objekt
noch nicht kennt.
Wie erreiche ich, dass diese Steuerung funktioniert?
Gruss
Tobias
Hi,
Die einzelnen Funktionen werden aus dem Flash-Panorama heraus korrekt aufgerufen, d.h. die alert-Boxen erscheinen. Die Links, die auf das Objekt "Panorama" zugreiffen funktionieren auch, nur die Zugriffe auf das Panorama-Objekt aus den Funktionen heraus klappen nicht, ich gehen einmal davon aus,
dass dies der Fall ist, weil der Browser zum Zeitpunkt des Ladens das Objekt
noch nicht kennt.
ich sehe nirgendwo, dass Du ein JavaScript-Objekt namens "Panorama" erstellen würdest. Entsprechend ist es auch nicht möglich, irgendwas damit anzustellen.
Wie erreiche ich, dass diese Steuerung funktioniert?
Erzeuge das Objekt.
Cheatah
Hi,
danke für die Antwort. Kannst du mir noch etwas weiter helfen? Wie müsste ich das Anstellen? Und weshalb funktionieren denn diese Links?
<a onClick="Panorama.moveTo(-30,0,70,10);" href="#">Move To Sound</a>
Danke
Tobi
Hi,
danke für die Antwort. Kannst du mir noch etwas weiter helfen? Wie müsste ich das Anstellen?
ein (globales) Objekt erstellt man in JavaScript, indem man eine Variable mittels 'var' deklariert und ihr etwas Sinnvolles zuweist. Was dieses Sinnvolle ist, musst Du selbst wissen.
Und weshalb funktionieren denn diese Links?
Ich nehme an, weil Du den schwerwiegenden Fehler begangen hast, zunächst im IE zu testen.
Cheatah
Hi,
nein, habs in flock und Firefox getestet.
Das Objekt existiert ja mit einer id, wieso muss
ich das als Variable deklarieren?
Danke
Tobias
Hi,
Das Objekt existiert ja mit einer id,
das ist kein JavaScript-Objekt, sondern ein HTML-Element.
wieso muss ich das als Variable deklarieren?
Wieso nimmst Du an, eine ID würde zu einem JavaScript-Objekt führen? Hast Du Dir mal die Konsequenzen überlegt? Hast Du mal daran gedacht, was ein <h1 id="document"> ergeben würde?
Cheatah
Hi,
ok, danke, bisher leuchtet mir das ja alles ein, aber wie kann ich denn
einem Objekt in JavaScript das HTML-Objekt zuweisen?
Ist ja ein SWF, das einfach die JavaScript-Parameter entgegennimmt?
LG
Tobias
Lieber t0bias,
ich habe zwei Dinge zu korrigieren, die hier etwas durcheinander geraten sind.
Es ist richtig, dass man ein Objekt erzeugt, indem man eine Variable definiert, um ihr dann einen Wert zuzuweisen. Alles in JavaScript ist ein Objekt.
Der Unterschied zwischen einer lokalen und einer globalen Variable ist, dass die globale Variable ein direktes Unterobjekt von "window" ist. Beispiele:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<title>Beispiel</title>
<script type="text/javascript">
var globaleVariable = "Ich bin ein (globaler) String!";
var globaleFunktion = function () {
alert (window.globaleVariable);
var lokaleVariable = "Ich gelte nur hier.";
}
window.globaleFunktion();
alert(typeof lokaleVariable + ":" + lokaleVariable);
</script></head>
<body>
<h1>Beispiel</h1>
</body></html>
wie kann ich denn
einem Objekt in JavaScript das HTML-Objekt zuweisen?
var ersteH1 = document.getElementsByTagName("h1")[0]; // ein <h1> muss mindestens einmal vorkommen, sonst Fehler!
var meinSpezialObjekt = document.getElementById("meineID"); // kein Element mit dieser ID vorhanden? Dann ist der Wert "undefined"
Ist ja ein SWF, das einfach die JavaScript-Parameter entgegennimmt?
Wie will das SWF auf "JavaScript-Parameter" zugreifen, und was sind "JavaScript-Parameter"?
Liebe Grüße,
Felix Riesterer.
Hi,
danke für die Antwort. Es ist so, dass das Panorama auf JavaScript-Befehle "hört", siehe
<a onClick="Panorama.moveTo(-30,0,70,10);" href="#">Move To Sound</a>
Seltsam ist nun, dass wenn ich in derselben Funktion folgendes einfüge:
Sound = document.getElementById ('Panorama');
alert(Sound.width);
mir das den korrekten Wert zurückliefert, der Browser das Objekt also scheinbar kennt. Scheinbar wird aber der Befehl "moveTo()" anders ausgeführt, wenn ich ihn aus einem Link aufrufe (siehe oben), als wenn ich ihn aus einer Funktion heraus aufrufe.
Jemand noch irgendeine Idee?
Danke,
Tobias
Lieber t0bias,
also 1 und eins gibt... ? Ja, was denn nur?
<a onClick="Panorama.moveTo(-30,0,70,10);" href="#">Move To Sound</a>
[...]
Sound = document.getElementById ('Panorama');
alert(Sound.width);
> [...]
> Jemand noch irgendeine Idee?
Na, klaro!
`<a href="#" onclick="window.myPanorama = document.getElementById('Panorama');if(myPanorama) myPanorama.moveTo(-30,0,70,10);">Move To Sound</a>`{:.language-html}
Mir ist allerdings nicht klar, ob das so "funzt", da ich nicht weiß, ob das "Panorama" aus Deinem ersten Code-Beispiel das entsprechende HTML-Elementobjekt betrifft, oder nicht. Im zweiten Beispiel nennst Du die Variable stattdessen "Sound"...
Liebe Grüße,
Felix Riesterer.
--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
Da ist nun irgendwas durcheinander geraten,
die "onclick"-Links funktionieren ja, die
function-codeblöcke eben nicht...
LG
Tobias
Lieber t0bias,
Da ist nun irgendwas durcheinander geraten,
die "onclick"-Links funktionieren ja, die
function-codeblöcke eben nicht...
welche function-codeblöcke? Wie sieht denn Dein Code nun aus???
Liebe Grüße,
Felix Riesterer.
Hallo,
ich sehe nirgendwo, dass Du ein JavaScript-Objekt namens "Panorama" erstellen würdest.
Das tut der Browser bei object/embed/img/form/... im Falle von name/id.
Mathias
Hi,
ich sehe nirgendwo, dass Du ein JavaScript-Objekt namens "Panorama" erstellen würdest.
Das tut der Browser bei object/embed/img/form/... im Falle von name/id.
wir scheinen unterschiedliche Vorstellungen von der Formulierung "der Browser" zu haben. Dass der IE einen derartigen Unfug betreibt ist mir klar, aber auch bei den von Dir genannten Elementen kann ich es in Seamonkey nicht nachvollziehen. Kannst Du mir eine Quelle für das beschriebene Verhalten nennen? Welche Bedingungen müssen erfüllt sein, damit ein Browser das id-Attribut zur magischen Erzeugung von JavaScript-Objekten nutzt?
Cheatah
Hallo,
ich sehe nirgendwo, dass Du ein JavaScript-Objekt namens "Panorama" erstellen würdest.
Das tut der Browser bei object/embed/img/form/... im Falle von name/id.
Das habe ich verwechselt: Das tut der Browser bei selbigen bei document, aber nicht window. Das ist ein Relikt aus Netscape-JavaScript-Zeiten. Dass es bei window auch geht, ist IE-Kompatibilität, die z.B. Gecko im Standardkonformen Modus nicht schluckt.
Mathias
Hi,
Das habe ich verwechselt: Das tut der Browser bei selbigen bei document, aber nicht window.
ah so, da bin ich ein Stück weit beruhigt.
Das ist ein Relikt aus Netscape-JavaScript-Zeiten.
Ja, hierzu habe ich auch als einziges etwas gefunden, was mir halbwegs relevant erschien.
Dass es bei window auch geht, ist IE-Kompatibilität, die z.B. Gecko im Standardkonformen Modus nicht schluckt.
<blick typ="überrascht"> Es gibt auch einen anderen Modus? </blick> ;-)
Cheatah
Hallo,
nur die Zugriffe auf das Panorama-Objekt aus den Funktionen heraus klappen nicht, ich gehen einmal davon aus, dass dies der Fall ist, weil der Browser zum Zeitpunkt des Ladens das Objekt noch nicht kennt.
Was ist die Fehlermeldung? Panorama.getPan wird einfach nicht gefunden? Was liefert Panorama/window.Panorama alleine? Was liefert getElementById("Panorama")?
Wenn es zu früh ist, um auf das Flash zuzugreifen, musst du halt onload abwarten.
Wie erreiche ich, dass diese Steuerung funktioniert?
Ehrlich gesagt verstehe ich nicht, wieso du aus dem Flash ein JavaScript startest, dass dann wieder mit dem Flash kommuniziert?!
Mathias