Platform: All
Version: MX 2004
問題
System.capabilitiesオブジェクトのプロパティやSystem.securityオブジェクトのメソッドにアクセスすると、System.capabilitiesというプロパティやSystem.securityというメソッドがないというエラーの発生することがあります(図001)。
図001■[出力]パネルに表示されたエラー
「capabilitiesという名前のプロパティ」や「securityという名前のメソッド」がないと警告される
このようなエラーが発生するスクリプトとしては、つぎのような例が挙げられます(スクリプト001)。System.capabilities.languageプロパティもSystem.security.allowDomain()メソッドも実際に存在し、スクリプトに問題はありません。
スクリプト001■System.capabilitiesやSystem.securityがないというエラーの発生するスクリプト
// タイムライン: _root
// 第1フレームアクション
System.useCodepage = true;
var language_str:String = System.capabilities.language;
System.security.allowDomain("www.FumioNonaka.com");
|
スクリプトの内容には問題がない
原因
コンパイラのバグと考えられます。Systemクラスのプロパティやメソッドに先にアクセスしてから、System.capabilitiesのプロパティやSystem.securityのメソッドを使用すると、このエラーが発生するようです。したがって、ステートメントの順番を変えると、エラーを解消することができます(スクリプト002)。
スクリプト002■エラーの発生しないスクリプト
// タイムライン: _root
// 第1フレームアクション
var language_str:String = System.capabilities.language;
System.security.allowDomain("www.FumioNonaka.com");
System.useCodepage = true;
|
Systemクラスのプロパティには後からアクセス
問題は、ActionScriptのクラス構成にあります。定義済みのActionScriptクラス(intrinsic)定義ファイルを格納したClassesフォルダを確認すると、Systemクラスを定義したファイルSystem.asのほかにSystemパッケージがフォルダとして存在します。そして、このSystemパッケージのクラスとして、クラスcapabilities.asとsecurity.asが配置されています。
図002■Classesフォルダの内容
クラス定義ファイルSystem.asのほかにパッケージとしてSystemフォルダが存在
そのため、「System.」でアクセスした場合、参照先はSystemクラスのメンバとSystemパッケージ内のクラスのふたつの可能性が発生します。今回の問題は、初めにSystemクラスのメンバにアクセスしてしまうと、Systemパッケージ下のクラスが参照できなくなってしまうことに起因するようです。
対処法
Systemクラスのプロパティ・メソッドを使用する前に、System.capabilitiesまたはSystem.securityオブジェクトにアクセスしておけば、問題は回避できます。したがって、メインのタイムラインの第1フレームで、予めこれらのオブジェクトにアクセスしておけばよいでしょう(スクリプト003)。
スクリプト003■予めSystem.capabilitiesおよびSystem.securityオブジェクトを参照
// タイムライン: _root
// 第1フレームアクション
System.security;System.capabilities; // 単に参照するだけ
// 以降はどこのタイムラインでもスクリプトを任意に記述できる
System.useCodepage = true;
var language_str:String = System.capabilities.language;
System.security.allowDomain("www.FumioNonaka.com");
|
最初に1度アクセスしておけば以降は問題が解消
_____
作成者: 野中文雄
作成日: 2004年11月27日