Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; breadcrumb has a deprecated constructor in /kunden/dciwam.de/webseiten/dciwam/includes/class.breadcrumb.inc.php on line 23
Flash valide in (X)HTML einbinden
Wie kann man Flash valide deklarieren, so dass es auch auf anderen Plattformen außer Windows/IE funktioniert?
Flash produziert ungefähr folgenden Code, um ein Flash-Movie "movie.swf" in HTML zu integrieren:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/ swflash.cab#version=5,0,0,0" width="160" height="112"> <param name="movie" value="movie.swf"> <param name="quality" value="high"> <param name="bgcolor" value="#FF6633"> <embed src="movie.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi? P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="160" height="112"> </embed> </object>
Leider ist dieser Code aus zwei Gründen nicht sonderlich geschickt: Erstens ist der Code
nicht valide, da das embed
-Tag nicht im HTML-Standard vorhanden ist.
Zweitens werden mit dem Code zwei verschiedene Methoden zur Anzeige angeboten, um Flash-Videos anzuzeigen. Die erste ist für Browser, die die Verwendung von lokalen ActiveX/COM- Klassen erlauben. Die obige Lösung spricht das ActiveX-Control für Flash ganz gezielt über dessen ClassID an.
Die zweite, sozusagen die Ausweichmethode über das embed
-Tag, ist für die
Browser gedacht, die ActiveX nicht verstehen oder nicht verwenden wollen, auch wenn diese object
korrekt
unterstützen. Aktuell kann (oder will) das außer dem IE kein Browser.
Da COM/ActiveX eine proprietäre Windows-Technologie ist, werden Browser auf Nicht-Windows-Betriebssystemen
sowieso ausgesperrt und müssen so auf das embed
-Tag zurückgreifen. Weil das object
-Tag über
das Attribut "type" MIME-Typen unterstützt und Flash glücklicherweise einen MIME-Typ zur
Verfügung stellt, kann Flash statt direkt über die ActiveX- ClassID auch indirekt über
seinen MIME-Typ application/x-shockwave-flash
angesprochen werden. Der Browser
muss dann über seine Liste der MIME-Typen ermitteln, welche Anwendung dieses Objekt ausführen
soll. Dabei passiert eigentlich auch nichts anderes, was vorher über das embed
-Tag
ausgeführt wurde.
Praktisch alle Browser können MIME-Typen ansprechen, weshalb diese Lösung auch in allen
Browsern funktionieren sollte, die das object
-Tag verstehen. Damit werden
zwei Fliegen mit einer Klappe geschlagen: Das invalide embed
-Tag kann entfallen
und eine (valide) Lösung funktioniert mit allen Browsern. Die knappste Lösung sieht also
wie folgt aus:
<object width="160" height="112" data="movie.swf" type="application/x-shockwave-flash"> <param name="movie" value="movie.swf"> </object>
Theoretisch könnte man auch auf die Zeile
<param name="movie" value="movie.swf">
verzichten, da die Flash-Datei bereits über das Attribut data
deklariert
wird, doch IE kommt damit nicht zurecht, Mozilla und Opera dagegen schon.
Wenn man stattdessen das Attribut data
weglässt, streikt Mozilla, während
IE und Opera funktionieren (in den Versionen: IE 6.0 SP1, Mozilla 1.5, Opera 7.03).
Wenn man eine Mischform anbieten will, also die ClassID mit gleichnamigem Attribut anbietet, streikt wieder Mozilla.
Womit wir endgültig bei den Nachteilen angekommen sind:
- Sollte Flash nicht oder in einer zu alten Version installiert sein, könnte über das
Attribut
codebase
die mindestens geforderte Version deklariert und im entsprechenden Fall der Download angeboten werden. Leider stört diese Angabe bei Mozilla und Opera die Darstellung, selbst wenn die korrekte Version installiert ist. - Wenn Flash auch unter Netscape 4 noch funktionieren soll, geht es nicht valide, weil
Netscape 4 das
object
-Element noch nicht kennt. In Netscape 4 funktioniert nurembed
für Plugins.
Weiterführende Links:
http://www.alistapart.com/stories/flashsatay/
http://www.macromedia.com/support/flash/ts/documents/tag_attributes.htm