Schlagwort: Flash

Die Bedeutung des wmode bei Flash

15. Februar 2010

Flashplayer
Man lernt nicht aus, oder kleine Änderung mit großer Wirkung. Ein Flashmovie auf einer Seite einzubinden, das dann von anderen Elementen optisch überlagert werden kann, dass bedeutete für mich bis heute immer das Attribut wmode mit der Einstellung “transparent” zu setzen. Völlig falsch, und erzeugt dazu noch unnötige Last.

In der Dokumentation zum Flashplayer von Adobe heißt es:

By using the Opaque property you can use JavaScript to move or resize movies that don’t need a transparent background. Opaque mode makes the movie hide everything behind it on the page. Additionally, opaque mode moves elements behind Flash movies (for example, with dynamic HTML) to prevent them from showing through.

Frei übersetzt Beim Wert opaque überlagert das Flashmovie alle anderen Elemente auf der Seite – damit kam diese Option für mich nicht in Frage, stattdessen setze ich den Wert von wmode auf transparent, denn in der Dokumentation heißt es weiter:

Transparent mode allows the background of the HTML page, or the DHTML layer underneath the Flash movie or layer, to show through all the transparent portions of the movie. This allows you to overlap the movie with other elements of the HTML page. Animation performance might be slower when you use this value.

Was blieb einem auch anderes übrig, Performance hin oder her, das Movie soll ja von anderen HTML-Elementen überlagert werden können. Dadurch, dass die Flashdatei transparent dargestellt wird, müssen Browser und Flash aber deutlich mehr rechnen als ohne diese Einstellung. Dies kann im schlimmsten Fall sogar den ganzen Browser lahmlegen. Wmode mit der Einstellung transparent zeichnete bei älteren Playerversion auch für Fehler verantwortlich, die man eigentlich gar nicht mit dem Flashmovie in Verbindung bringen würde. So wurde das @-Zeichen in Eingabefeldern plötzlich nicht mehr dargestellt. Gleiches galt für den Cursor innerhalb eines Textfeldes. Auch wenn diese Phänomene mittlerweile (soweit ich weiß) der Vergangenheit angehören – die Performance Problematik bleibt, da kann die Prozessorlauslastung schon mal auf 50% und mehr steigen. Was schreibt Adobe:

If windowless mode is used, performance can be affected to some degree. If fastest performance is a top priority, you may consider other design options.

Doch genug der Vorrede: Mir ging es nie um die “echte Transparenz” des Films. Nicht der Hintergrund war wichtig, sondern der Z-Index sollte berücksichtigt werden. Elemente mit einer höheren Schichtung sollten davor, alle anderen hinter dem Movie liegen. Eben das geht auch mit der Einstellung opaque – auch wenn die Dokumentation sich da sehr mißverständlich ausdrückt. Und so schaut ab heute meine XHTML 1.0 Strict Fassung zum Eindinden einer Flash Datei aus (eine minimal erweiterte Fassung des Flash Satay):

<object type="application/x-shockwave-flash"
  data="movie.swf" width="400" height="300">
    <param name="movie" value="movie.swf" />
    <param name="wmode" value="opaque" />
    <img src="noflash.gif" alt="No Flash!" />
</object>