SWFObject Logo

SWFObject ist ein Skript, das dazu dient, Flashdateien (.swf) in HTML-Seiten einzubetten. Das Skripte (JavaScript) ist sehr einfach zu nutzen und hat viele Vorteile wie Flash-Plugin-Erkennung, keinen Aktivierungsrahmen beim Internet Explorer, W3C-Validität oder Unterstützung der Express Installation.

Gestern wurde nach 14 Monaten der Nachfolger des populären SWFObject 1.5 veröffentlicht: SWFObject 2 (ehemals SWFFix). Grund genug, eine Blick darauf zuwerfen, wie es funktioniert.

(Update: Unbedingt auch einen Blick auf embed-swf.org werfen)

Wie verwendet man SWFObject?

Grundsätzlich gibt es zwei verschiedene Methoden, um die Flash-Inhalte mit SWFObject einzubetten:

  • Static Publishing
  • Dynamic Publishing

Static Publishing

Bei Static Publishing werden sowohl Flash als auch der alternative Inhalt, wenn Flash nicht installiert ist, über gewöhnliches HTML integriert. JavaScript wird nur dazu verwendet, Probleme zu beseitigen, die über HTML nicht gelöst werden können.

Die Vorteile dieser Methode sind, dass der Flashinhalt auch bei deaktiviertem JavaScript dargestellt wird. Integrierte Flashdateien laufen damit beispielsweise auch auf der Sony PSP, die JavaScript nur mangelhaft unterstützt. Des Weiteren sollen z.B. RSS Reader die Flashinhalte dank dieser Einbettungsmethode darstellen.

Ein Beispielcode lautet folgendermaßen:

HTML:

  1. "http://www.w3.org/1999/xhtml""en""en"
  2.  
  3.     SWFObject v2.0 - step 3
  4.     "Content-Type""text/html; charset=iso-8859-1"
  5.     "text/javascript""swfobject.js"
  6.  
  7.     "text/javascript"
  8.     swfobject.registerObject("meinFlash", "9.0.0", "expressInstall.swf");
  9.    
  10.  
  11.  
  12.  
  13.    
  14.  
  15.       "meinFlash""clsid:D27CDB6E-AE6D-11cf-96B8-444553540000""550""400"
  16.  
  17.         "movie""myflash.swf"
  18.        
  19.         "application/x-shockwave-flash""myflash.swf""550""400"
  20.        
  21.           Dies ist der alternative Content, wenn kein Flash oder eine veraltete Version installiert ist.
  22.        
  23.        
  24.        
  25.      
  26.    
  27.  

Die classid und type sind feste Werte. data und value legen die URL der SWF-Datei fest, width und height die darzustellende Größe des SWF-Files. Wie man sieht, müssen manche Werte doppelt eingepflegt werden.

Folgende Parameter sind für param zur Konfiguration der Flashdatei möglich:

  • play
  • loop
  • menu
  • quality
  • scale
  • salign
  • wmode
  • bgcolor
  • base
  • swliveconnect
  • flashvars
  • devicefont
  • allowscriptaccess
  • seamlesstabbing
  • allowfullscreen
  • allownetworking
  • Jetzt zum SWFObject: Wichtig ist, dass im Header mit der Zeile das SWFObject eingebunden wird. Mit registerObject wird eine Flashdatei "registriert". Über eine ID (im Beispiel "meinFlash") wird der Bezug zum weiteruntenstehenden Code hergestellt. Zusätzlich gibt man die unterstützte Flashversion (z.B. ab 9.0.0) und den Pfad zur Express-Installation an.

    Zu erwähnen ist noch, dass der alternative Content, wenn Flash veraltet oder gar nicht vorhanden ist, selbst wählbar ist. Auch wird dieser Inhalt von den Suchmaschinen indiziert.

    Demo: Static Publishing

    Dynamic Publishing

    Dynamic Publishing entspricht der Verfahrensweise des bisherigen SWFObjects 1.5. Der alternative Inhalt, wenn kein Flash vorhanden ist, wird ganz gewöhnlich über HTML erstellt. Per JavaScript werden die Flashinhalte zur Laufzeit eingefügt.

    Diese Methode hat den Vorteil, dass das Authoring leichter und weniger umständlich ist und kein redundanter Code geschrieben wird. Außerdem wichtig: Es wird der "click-to-activate" Mechanismus verhindert, der beim Internet Explorer ab Version 6 (IE6, IE7) und bei Opera ab Version 9 auftritt.

    Ein Beispielcode für diese Variante lautet:

    HTML:

    1. "http://www.w3.org/1999/xhtml""en""en"
    2.    
    3.         SWFObject v2.0 dynamic embed sample page
    4.         "Content-Type""text/html; charset=iso-8859-1"
    5.         "text/javascript""swfobject.js"
    6.         "text/javascript"
    7.         swfobject.embedSWF("myflash.swf", "meinFlash", "550", "400", "9.0.0", "expressInstall.swf");
    8.        
    9.    
    10.    
    11.         "meinFlash"
    12.             Alternativer Inhalt
    13.             Dies ist der HTML-Code, wenn Flash nicht verfügbar oder veraltet ist.
    14.        
    15.    

    Möchte man z.B. Flashvars ergänzen, hier ein Beispiel aus meinem FLV Player, der schon seit einiger Zeit die Beta von SWFObject 2 nutzt:

    HTML:

    1. ...
    2. "text/javascript""swfobject.js"
    3.  
    4. "text/javascript"
    5.     var flashvars = {};
    6.    
    7.         flashvars.playerpath = "/pfad";
    8.         flashvars.contentpath = "123"; 
    9.         flashvars.video = swfobject.getQueryParamValue("video");
    10.                    
    11.         var params = {};
    12.             params.scale = "noscale";
    13.             params.allowfullscreen = "true";
    14.             params.salign = "tl";
    15.        
    16.         var attributes = {};
    17.             attributes.align = "left";
    18.        
    19.     swfobject.embedSWF("flvplayer.swf", "videoPlayer", "650", "530", "9.0.28", "expressInstall.swf", flashvars, params, attributes);   
    20.    
    21. ...

    Einen Parameter aus der URL (z.B. test.html?video=demo.flv) zu erfassen, funktioniert mit SWFObject übrigens so: swfobject.getQueryParamValue("video").

    Demo: Dynamic Publishing

    Welche Methode ist besser?

    Zu Methode 1: Laut Entwicklerteam haben ca. 80% der Nutzer den IE6, IE 7 oder Opera. Deshalb wird bei diesen Anwendern der "click-to-activate" auftreten, was natürlich nicht wünschenswert ist.

    Zu Methode 2: Sechs Prozent haben JavaScript deaktiviert bzw. der Browser unterstützt kein JavaScript. Diese Nutzer werden also, trotz installiertem Flash Player, kein Flashcontent zu sehen bekommen. Es erscheint der alternative Content.

    Meines Erachtens spricht dies in den meisten Fällen dafür, dass man auf Methode 2 setzen sollte.

    Demo: Static Publishing
    Demo: Dynamic Publishing

    Link: SWFObject