XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Javascript & Ajax (http://xhtmlforum.de/forumdisplay.php?f=83)
-   -   src - Attribut in Flashelement ändern. (http://xhtmlforum.de/showthread.php?t=45593)

MisterDither 24.04.2007 11:20

src - Attribut in Flashelement ändern.
 
Hallo,

Ich arbeite derzeit an einem Webinterface speziell für Mozilla Firefox. Nun habe ich dort ein Flashdokument mittels embed eingegliedet, was so im Quelltext aussieht

Code:

<embed id="flash" src="img/test.swf" [...] type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"></embed>
Nun möchte ich, dass das embed-Element bei einem bestimmten Event ein anderes Flashdokument lädt. Mein pragmatischer Versuch mit

Code:

document.getElementById('flash').src = "img/anderesFlash.swf";
funktioniert nicht. Hat da jemand eine funktionierende Lösung?

Gruß
Christian

code_pilot 24.04.2007 12:58

Zitat:

Zitat von MisterDither (Beitrag 331270)
Hat da jemand eine funktionierende Lösung?

Laut JavaScript / Objektreferenz / embeds
ist src eine Read-Only Eigenschaft, die also nicht änderbar ist.

Was ich aber Vorschlagen würde ist folgendes:

Code:

<div id="flash"></div>

<script type="text/javascript">
<!--
        function update_src( src )
        {
                var strHtmlCode = '<embed src="' + src + '" [...] type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"></embed>';
               
                document.getElementById( "flash" ).innerHTML = strHtmlCode;
        }
-->

        update_src( "url1.swf" );
</script>

(hab ich aber nicht getestet!)

Kannst das aber mal ausprobieren!

Gruß
code_pilot

Edit: Huch da war noch ein doofer Bug drin ;)

MisterDither 24.04.2007 15:53

Danke für deine Antwort. :)

Also bei mir funktioniert dein Ansatz leider nicht. Ich dachte zuerst, dass es mit innerHTML nicht zurecht kommt, weswegen ich den "offiziellen Weg" mal gegangen bin. Die Funktion sieht dann so aus

Code:

function changeSrc(str) {

                document.getElementById('flash').removeChild(document.getElementById('flash-embed'));
               
                var newFlashElement = document.createElement('embed');
                newFlashElement.setAttribute('id', 'flash-embed');
                newFlashElement.setAttribute('src', 'img/' + str);
                newFlashElement.setAttribute('quality', 'high');
                newFlashElement.setAttribute('scale', 'exactfit');
                newFlashElement.setAttribute('menu', 'false');
                newFlashElement.setAttribute('swLiveConnect', 'false');
                newFlashElement.setAttribute('type', 'application/x-shockwave-flash');
                newFlashElement.setAttribute('pluginpage', 'http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash');

                document.getElementById('flash').appendChild(newFlashElement);
        }

Sowohl diese als auch die Variante mit innerHTML produzieren das Gleiche: Das alte Element verschwindet, es wird ganz kurz grau und dann erscheint nix. :(

Kann es sein, dass es gar nicht möglich embed-Elemente nachträglich in die DOM einzugliedern?

EDIT: Das neue embed wird in die DOM eingegliedert, wie es an Hand des DOM Inspectors in Firefox sehen kann. Es erscheint einfach nicht ...

code_pilot 24.04.2007 16:16

Zitat:

Zitat von MisterDither (Beitrag 331285)
Also bei mir funktioniert dein Ansatz leider nicht. Ich dachte zuerst, dass es mit innerHTML nicht zurecht kommt, weswegen ich den "offiziellen Weg" mal gegangen bin. Die Funktion sieht dann so aus

Hmm naja innerHTML ist aber nichts inoffizielles, hatte damit bisher nie Probleme.

Und das hier funktioniert bei mir ohne Probleme, ich kann jederzeit zwischen den Flashes wechseln:

Code:

<html>
<head>
        <title></title>
</head>
<body>

<div id="flash">
        <!-- will be filled -->
</div>

<script type="text/javascript">
<!--

function update_swf( src )
{
        document.getElementById( "flash" ).innerHTML = '<embed src="' + src + '" quality="high" scale="exactfit" menu="false" bgcolor="#000080" width="600" height="400" swLiveConnect="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" />';
}



-->
</script>

<a href="#" onclick="update_swf( 'http://de.selfhtml.org/html/multimedia/anzeige/nibbles.swf' );">Nibbles starten</a>
<a href="#" onclick="update_swf( 'http://www.ballz.de/toons/eyeballz1.swf' );">Was anderes...</a>

</body>
</html>

Gruß
code_pilot

PS: Das obige Beispiel klappt nicht im IE, ich denke aber das liegt daran daß die SWFs auf anderen Servern liegen oder so...

MisterDither 24.04.2007 17:02

Bei mir spackte eine swf-Datei zu sehr rum. Als ich diese dann mit einer anderen ersetzte ging es. :)

Zitat:

Hmm naja innerHTML ist aber nichts inoffizielles, hatte damit bisher nie Probleme.
Soweit ich mein AJAX-Buch richtig gelesen habe, unterstüzen zwar innerHTML sämtliche Browser, hat aber nie zur Spezifikation gehört. Aber es ist eigentlich egal ob man innerHTML nimmt oder nicht. Nun genug geklugscheißert. :D

Danke für deine Hilfe. :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:22 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023