problem mit variablenweitergabe an flash
flocky 26.04.2004 - 20:45 458 5
flocky
sn0wner (analphabet)
|
hallo folgender code: <HTML>
<HEAD>
<TITLE>OARSCH</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<script language=javascript>
function passflash(play)
{
window.document.oarsch.SetVariable("oarsch",play);
}
</script>
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
WIDTH="550" HEIGHT="400" id="oarsch" ALIGN="">
<PARAM NAME=movie VALUE="OARSCH.swf" swLiveConnect=true>
<PARAM NAME=quality VALUE=high>
<PARAM NAME=bgcolor VALUE=#FFFFFF>
<EMBED src="OARSCH.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="OARSCH" ALIGN=""
TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
<a href="#" onMouseUp="javascript:passflash('1');" onMouseOver="passflash('2');">boano</a>
</BODY>
</HTML>
window.document.oarsch.SetVariable("oarsch",play); gibt die variable "oarsch" mit dem wert "play" an die instanz des embedded flash-movies weiter, in flash wird die variable einfach mit _root.oarsch geprüft, funzt alles im IE super aber opera macht probleme, er movie stoppt nicht wie lt. if-condition sollte. hat jemand ideen welche restriktionen opera in der richtung hat?
|
Rektal
Here to stay
|
onmouseup="javascript jedenfalls falsch, hier gehoert kein javascript: hin .. gehoert genauso wie onmouseover.
Moeglicherweise ist document.oarsch in Opera nicht definiert? alert(document.oarsch) ? Hier gehoert document.getElementById('oarsch').<etc.etc.> hin. Eigentlich.
|
flocky
sn0wner (analphabet)
|
ok also javascript: weg hat keine änderung gebracht, btw: wozu schreibt man das eigentlich manchmal hin? ob onMouseUp oder Over is eigentlich egal, es geht nur um den event. documentgetelementbyid dachte ich auch, hat auch nix gebracht, beim altert gibts keine ausgabe.
|
Rektal
Here to stay
|
Wenns beim alert() keine Ausgabe gibt, dann ist reflektiert es quasi das unter document.oarsch nunmal nicht im Document-Tree ist. Desshalb nimmst du document.getElementById, damit findest du es.
javascript: ist ein sog. Pseudo-Handler, wurde nur in HREF-Attributen verwendet, ist ein relikt aus NS4 Zeiten, denke ich mal. Heutzutage verwendet man einfach onklick/onmouseover/onmouseout etc., das sind schon die Javascript-Handler, da rein kommt nur javascript-Code, kein javascript: Pseudo-Protokoll-Handler
|
flocky
sn0wner (analphabet)
|
mit getelementbyid gehts im IE genau so, in opera wieder nicht... danke für die erklärung, also kann ich mir das in zukunft ersparen. apropos ersparen, wann muss ich die <script...> tags setzen und wann nicht?
|
Rektal
Here to stay
|
Moeglicherweise liegt das Problem daran, das Opera, warum auch immer, das Flash Object nicht einfach so scripten kann/laesst. Wie du vielleicht selber siehst, wenn du onmouseover/onclick setzt, bearbeitest du direkt ein Event eines Objekets, d.h. du gehst davon aus, wenn der Benutzer seine Maus ueber das Element faehrt, wird dein Javascript-Code beim eintreten des Events ausgefuehrt. Bei <script> definiertst du einfach nur Javascript code, der unter Umstaenden gar nicht gleich ausgefuehrt wird, weil du ihn spaeter brauchst. Beispiel <a href="url.html" onclick="window.open(this.href, 'popup', ''); return false;">Link</a>
oder <script>
function openPopup(href) {
window.open(href, 'popup', '');
return false;
}
</script>
...
<a href="url.html" onclick="return openPopup(this.href);">Link</a>
D.h. du definiertst im Script einmal Funktionen, die du beliebig oft ausfuehren kannst, ohne sie jedesmal neu zu definieren. Ist schon praktisch wenn es komplexere Sachen sind. Idealerweise wird im head einmal ein <script>-Tag definiert, das ein externen Javascript laedt, das alle benoetigten Funktionen definiert. So kann das *.js auch noch gecached und die HTML-Seiten werden kleiner.
|