dciwam.de / faq / html / flash-einbinden

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:

Weiterführende Links:
http://www.alistapart.com/stories/flashsatay/
http://www.macromedia.com/support/flash/ts/documents/tag_attributes.htm

Andreas Hofmann

Zum Seitenanfang

URL: http://dciwam.de | Letzte Änderung: 21.05.2009 | G. Schneider | Kontakt