サイトトップ

Director Flash 書籍 業務内容 プロフィール

Adobe Flash非公式テクニカルノート

Flash PlayerとSWFのバージョンを調べる

ID: FN1111005 Product: Flash CS3 and above Platform: All Version: 9 and above/ActionScript 3.0

Flashコンテンツを正しく再生するためには、書出されたSWFファイルのバージョンが再生環境のFlash Playerのバージョンに対応していなければなりません。SWFファイルはコンテンツを提供する側がパブリッシュするバージョンを決めるのに対して、Flash Playerのバージョンは閲覧するユーザーによってまちまちです。ふたつのバージョンは、区別して理解しなければなりません。


01 Flash PlayerのバージョンはCapabilities.versionプロパティで調べる
Flashコンテンツ(SWFファイル)を再生している環境のFlash Playerのバージョンは、Capabilities.versionプロパティで調べられます。読取り専用の静的プロパティで、たとえばつぎのような情報が示されます。

WIN 9,0,0,0   // Flash Player 9 for Windows
MAC 7,0,25,0   // Flash Player 7 for Macintosh
LNX 9,0,115,0   // Flash Player 9 for Linux
AND 10,2,150,0   // Flash Player 10 for Android

初めの3文字はプラットフォームを示し、スペースの後に続くカンマ区切りの数字がバージョン番号です。バージョン番号の4つの数字は頭から、それぞれメジャーバージョン、マイナーバージョン、ビルド、インターナルビルドと呼ばれます[*1]

文字列の情報は目で確かめやすいものの、プラットフォームの情報やバージョン番号の個々の数字を扱うには不便です。String.split()メソッドを使えば、引数の文字(たとえばスペースやカンマ)でエレメントに区切った配列が得られます。

var my_array:Array = 文字列.split(区切り文字)
スクリプト001■Capabilities.versionプロパティの文字列情報を配列にする
  1. var version_str:String = Capabilities.version;
  2. trace(version_str);   // 出力: MAC 10,2,153,2
  3. var version_array:Array = version_str.split(" ");
  4. trace(version_array[0]);   // 出力: MAC
  5. trace(version_array[1]);   // 出力: 10,2,153,2
  6. version_array = version_array.concat(version_array.pop().split(","));
  7. trace(version_array);   // 出力: MAC,10,2,153,2
  8. trace(version_array.length);   // 出力: 5

スクリプト001は、まずCapabilities.versionプロパティで得られた文字列を、String.split()メソッドにより半角スペース(" ")でエレメントに区切った配列にしています(第1および第3行目)。これでプラットフォームの情報は分けられたものの、バージョン番号の数字4つは文字列としてまとまったままです(第4〜5行目の[出力]参照)。

そこで、スクリプト001は、つぎにバージョン番号の数字4つをエレメントに切り分けます。もとの配列(version_array)のインデックス1の文字列(第5行目参照)を、String.split()メソッドによりカンマ(",")で配列エレメントに分ければよいでしょう。戻り値の配列をもとの配列につなぐには、Array.concat()メソッドを用います。他方、バージョン番号がまとまったままのインデックス1のエレメントは要りません。配列の最後のエレメントは、Array.pop()メソッドで取除けます。これらの処理を第6行目でまとめて行っています。

このように複数のメソッドを1行のステートメントで呼出すときには、参照するインスタンスの扱いと戻り値に注意しなければなりません。Stringクラスのメソッドは、参照する文字列はそのまま変えません。したがって、もとの文字列を変更したいなら、それが入った変数などの値を戻り値で上書きします。逆に、Arrayクラスには参照する配列自体を書替えるメソッドが少なくありません。スクリプト001で使ったメソッド3つについて、参照するインスタンスの扱いと戻り値を表001にまとめました。

表001■メソッドが参照するインスタンスの扱いと戻り値
メソッド 参照するインスタンス 戻り値
String.split() 変わらない エレメントが分けられた配列
Array.concat() 変わらない 引数と連結された配列
Array.pop() 最後のエレメントが除かれる 取出されたエレメント

なお、配列エレメントに分けられたバージョン番号の4つの数字は、そのままではデータ型がStringであることにご注意ください。

[*1] バージョン番号の後のふたつの呼び名は、開発者によって異なるようです。たとえば、Microsoft「Internet Explorerのバージョンに関する情報」、@IT「ビルドはどのような要件を満たすべきか」の(2-3)「ビルド番号とバージョン番号について」の項、「メモ/雑記/バージョン番号の考え方」などをご参照ください。

[*2] 正規表現を用いると、スクリプトをさらに短くできます。String.split()メソッドの引数に、スペース(\s)または(|)カンマ(,)という正規表現が渡せるからです。正規表現については、「ActionScript 3.0で始めるオブジェクト指向スクリプティング」第28回「正規表現で文字列を扱う」をお読みください。

var version_array:Array = Capabilities.version.split(/\s|,/);
trace(version_array);   // 出力: MAC,10,2,153,2
trace(version_array.length);   // 出力: 5

なお、記述が短いことは、必ずしも処理の速さを意味しません。正規表現は複雑な文字列の処理ができる反面、速さでは劣ることが多いです(「文字列の検索・置換は正規表現よりStringクラスのメソッドを使う方が速い」参照)。


02 書出されたSWFファイルのバージョンはLoaderInfo.swfVersionプロパティで確かめる
[パブリッシュ設定]で[Flash Player]のバージョンを選ぶと、そのバージョンに対応するSWFファイルが書出されます(図001)。

図001■Flash Professional CS5.5の[パブリッシュ設定]ダイアログボックス

書出されたSWFファイルのバージョンは、LoaderInfo.swfVersionプロパティで確かめられます。読取り専用のプロパティで、値は整数です。このプロパティは読込みに少し時間がかかるため、メインタイムラインの第1フレームでいきなり調べるとランタイムエラー#2099が示されます(図002)。

図002■

この場合、LoaderInfoオブジェクトそのものは参照でき、イベントリスナーも加えられますので、LoaderInfo.completeイベント(定数Event.COMPLETE)で読込みを待てば大丈夫です。

loaderInfo.addEventListener(Event.COMPLETE, xSwfVersion);
function xSwfVersion(eventObject:Event):void {
  trace(loaderInfo.swfVersion);
}

LoaderInfo.swfVersionプロパティで示される整数値については、ひとつ注意しておかなければなりません。それは、Flash Player 10.2以降はPlayerのメジャーバージョンの番号とSWFファイルのバージョン番号が一致しないことです。ActionScript 3.0が使えるFlash Player 9以降について、対応するSWFのバージョンは次表002のとおりです[*3]

表002■Flash PlayerとSWFのバージョン対応
Flash Player SWF
9 9
10/10.1 10
10.2 11
10.3 12
11.0 13
11.1 14
11.2 15
11.3 16

これはFlash CS4 ProfessionalがFlash Professional CS5にアップグレードしたとき、サポートする最新のFlash Playerのバージョンが10.1から10.2にマイナーバージョンしか上がらなかったことによると考えられます。アプリケーションはメジャーアップグレードしていますので、書出されるSWFファイルのバージョンも(メジャー)バージョンが上がり、Flash Playerと対応しなくなったのでしょう。

[*3] Flash Player 11.0以降の機能について、参考ドキュメントを掲げます。



作成者: 野中文雄
作成日: 2011年11月21日
更新日: 2012年4月20日 表002にFlash Player 11.1以降を加え、新たに注[*3]を追加した。


Copyright © 2001-2012 Fumio Nonaka.  All rights reserved.