Es gibt mehrere Möglichkeiten, Flashdateien ein eine Webseite einzubauen. Jedoch gibt es nur 2 Möglichkeiten die auch wirklich den W3C Standart entsprechenden.
Diese 2 Möglichkeiten funktionieren natürlich auch in den verschiedenen Browser Versionen.
Deswegen gibt es keinen Grund , die alte, unvalide und falsche Version mit EMBED zuverwenden.
Inhalt
Diese Version sollte auf keinen Fall verwendet werden, leider wird diese aber noch weiterhin von Flash Editor 8 und Flash Editor 9 verwendet bzw. erzeugt.
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" id="Untitled-1">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="movie" value="Untitled-1.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="Untitled-1.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="Untitled-1" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
Diese Beispiel oben ist eines durch den Flash Editor erstellert HTML Code bzw. xHTML Code.
Dieser Code ist leider durch den EMBED TAG der rot gekennzeichnet ist nicht HTML4 valide.
W3C schreib dazu:
...Embed was never Part of any standardized version of HTML...
Quelle: http://validator.w3.org/docs/help.html#faq-flash
Jedoch wenn der Embed Teil einfach rausgenohmen wird, so wird die Flashdatei nur noch im Internet Explorer angezeigt.
Es ist jedoch auch ohne weiteres möglich dieses Problem zu beheben, mit einen der beiden validen Möglichkeiten.
Diese Möglichkeit ist einer der bekannteste und überzeugt durch sehr wenig HTML Code.
Im Grunde werden hier alle Teile die nicht von allen Browsers verstanden werden entfernt und durch andere ersetzt.
Somit wird die classid die nur von Internet Explorer verstanden wird, entfernt und durch eine Typbezeichnung ersetzt.
<object type="application/x-shockwave-flash" data="Untitled-1.swf" width="550" height="400" id="Untitled-1">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="movie" value="Untitled-1.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
</object>
Wie man sieht, sind nur ein paar Kleinigkeiten zu dem Beispielcode von oben anders.
Natürlich kann man die Paramerter für "allowScriptAccess", "allowFullScreen", "quality" und "bgcolor" auch weglassen falls man diese nicht benötigt.
Wodurch ein sehr kleiner HTML Code entsteht mit welchen sich Flashdateien in den verschiedenen Browsern anzeigen lassen.
Vorteile
- Minimaler HTML Code fuer die Anzeige einer Flashdatei.
- Funktioniert in mehreren Browsern ohne Probleme (Crossbrowser).
- Valider HTML Code konform nach W3C.
Nachteile
- Installiert oder updated nicht den Flashplayer bei Benutzern mit falscher Flashversion oder gar keiner Flashversion.
- Internet Explorer zeigt große Flashdateien erst an, nachdem diese komplett geladen worden sind. (Mit Preloader tritt das Fehlerverhalten nicht auf !)
Quelle
Conditional Comments
Die andere Möglichkeit ist die Lösung über Conditional Comments.
Conditional Comments sind Bedigungen mit welchem es möglich ist, festzustellen welchen Browser der User benützt.
Als Beispiel werden nachfolgend einige Informationen zu dem Browser angezeigt und dies ganz ohne JavaScript.
Conditional Comments Beispiel
<!--[if IE]>
conditional comment: Das ist ein Internet Explorer<br />
<![endif]-->
<!--[if !IE]> <-->
conditional comment: Das ist KEIN ein Internet Explorer<br>
<!--> <![endif]-->
<!--[if IE 6]>
conditional comment: Das ist ein Internet Explorer 6<br>
<![endif]-->
<!--[if IE 7]>
conditional comment: Das ist ein Internet Explorer 7<br>
<![endif]-->
<!--[if lt IE 6]>
conditional comment: Das ist ein Internet Explorer 5.5 und niedriger<br>
<![endif]-->
Ausgabe:
conditional comment: Das ist KEIN ein Internet Explorer
Wie man hier schön sieht kann man sehr einfach zwischen den verschiedenen Browser Versionen unterscheiden und genau dies benötigen wir für die nächste Lösung.
Flash Object mit Conditional Comments
Diese Lösung benützt Conditional Comments um die Flashdatei im Internte Explorer anders auzulieferns als in Firefox und den Rest der Browsers.
Aus diesem Grund hat diese Lösung eine reihe von Vorteilen, jedoch benötigt diese Lösung auch mehr HTML Code.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="300" height="120">
<param name="movie" value="movie.swf">
<!--[if !IE]> <-->
<object data="movie.swf" width="300" height="120" type="application/x-shockwave-flash">
<param name="pluginurl" value="http://www.macromedia.com/go/getflashplayer">
Browser is to old...
</object>
<!--> <![endif]-->
</object>
Wie man hier sieht erhält der Internet Explorer wie gewohnt seine classid und seine codebase.
Alle andere Browser erhalten einen type und die pluginurl.
Somit kann der Flashplayer bei User ohne Flash installiert werden, auserdem wird im Internte Explorer die Version überprüft und der User gegebenfalls auf ein Update hingewiesen.
Diese Version sollte verwendet werden, wenn der User aufgefordert werden soll den Adobe Flash Player zu installieren oder wenn man große Flashdateien direkt anzeigen muss ohne Preloader.
Im Normalfall sollte man immer einen Preloader bei großen Flashdateien verwenden, aus diesem Grund sollte dies eigentlich nie der Fall sein.
Vorteile
- Keine bekannten Problem, durch einfache Browserweiche.
- Installiert oder Updated the Flashplayer, falls der User keinen installiert hat oder aber eine andere Version benutzt.
- Funktioniert in mehreren Browsern ohne Probleme (Crossbrowser).
- Valider HTML Code konform nach W3C.
Nachteile
- Doppelter HTML Code.
- Verwendet eine Browserweiche.
- User wird mit Flashplayer Installation evt. genervt oder denkt an einen Virus.
Quelle
Die HTML 5.0 Spezifikation hat den Embed TAG als offizellen TAG mit aufgenohmen.
Dies bedeutet das entsprechende HTML5 Browser den Object TAG sowie den Embed TAG unterstützen müssen.
Es bedeutet aber nicht das ein Object TAG und ein Embed TAG verwenden werden muss (einer der beiden TAGs reicht aus).
Solltet Ihr also bereits entsprechende Object TAGs verwenden, gibt es keinen Grund diesen mit einem Embed TAG zu erweitern oder zu ersetzten.
Desweiteren ist der Object TAG an sich schöner aufgebaut als ein Embed TAG, da hier die einzelne Parameter jeweils einen eigenen TAG besitzen.
Im Grund ist es also in HTML5 jedem selbst überlassen ob er einen Embed TAG oder einen Object TAG verwenden.
Für HTML4 ist jedoch wie gesagt nötig für einen validen Einbau den Object TAG zu verwenden !
Es sollte je nach Aufgaben und Verwendungszweck von Flash eine der beiden Methoden bevorzugt verwendet werden.
Aber man sollte auf keinen Fall auf die EMBED Version zurück greifen, da diese nicht in HMTL4 valide ist und erst in HMTL5 zum offizellen Standard zählt.
Es gibt auch keine Grund warum man keiner der beiden Versionen verwenden sollte, da diese wie gesagt in allen Browser funktionieren und somit in der Hinsicht keinerlei Nachteile bei der Zielgruppe auftreten.
