System.capabilitiesオブジェクトにアクセスすると、あるとき突然そんなものは知らないといわれることがあります。コンパイラが記憶喪失になるという悲しいバグです。
System.capabilitiesオブジェクトとSystem.setClipboard()メソッド
System.capabilitiesオブジェクトを使うと、Flash Playerやシステムの情報を調べることができます。たとえばSystem.capabilities.osプロパティは、オペレーティングシステムの詳しいバージョンを返します。
図001■System.capabilities.osはOSのバージョンを返す
そのほか、Flash Playerの再生されているシステム言語を返すSystem.capabilities.languageや、画面の解像度を調べるSystem.capabilities.screenResolutionX/screenResolutionYといったプロパティがあります。
System.setClipboard()メソッドは、指定したテキストをクリップボードにコピーします。コピー&ペーストの操作をスクリプトで実現する場合に、利用することができます。
きっかけはSystem.setClipboard()
2行のフレームアクションを、実行してみましょう。
System.setClipboard("test");
trace(System.capabilities.os); // コンパイルエラー
[ムービープレビュー]で確認すると、「capabilities'という名前のプロパティはありません」というエラーが表示されます。そして、2行目のステートメントが、問題の箇所とされています。
図002■[出力]パネルに表示されたエラー
しかし、System.capabilitiesプロパティは、もちろん存在します。不思議なことに、ステートメントの順序を入替えると、エラーは発しなくなります。
trace(System.capabilities.os); // エラーは発生しない
System.setClipboard("test");
さらに調べてみると、System.capabilitiesオブジェクトにアクセスする前にSystem.setClipboard()メソッドを実行すると、コンパイラがSystem.capabilitiesオブジェクトの存在を忘れてしまうようです。
したがって、対処法は、先にSystem.capabilitiesオブジェクトにアクセスしておけばよいということになります。
temp = System.capabilities; // オブジェクトに先にアクセス
delete temp; // 変数の存在が気になるようなら削除(省略可)
System.setClipboard("test");
trace(System.capabilities.os); // エラーは発生しない