— boreal-kiss.com

FileReference.loadがリモートサーバーで動作しない(半分解決済み)

ローカルでは動作するのにサーバーにアップすると以下のエラーを吐く。

Error #2014 現在は使用できない機能です。このシステムではサポートされていない機能です。

何か設定が必要なのかな。誰かサーバーにアップして動作テストしておくれ。関係あるかしらんけどうちはさくらインターネット(月額500円)です。

//The swf file resides within a remote server, 
//ex., http://boreal-kiss.com/xxx.swf

var f:FileReference = new FileReference();
            
try{
    //Works well in the local, but...
    f.load();
}
catch(e:Error){
    //This is the result for my webserver.
    trace(e.message);//Error #2014
}

[追記:2008/05/28]

FileReference.loadがthrowしているのはIllegalOperationErrorだと判明。

IllegalOperationError 例外は、メソッドが実装されていないか、使用方法に実装が対応していない場合にスローされます。たとえば、次のような状況で無効な操作エラーの例外が発生します。

  • 基本クラス (DisplayObjectContainer など) に、ステージでサポートされている範囲を超えた機能 (マスクなど) がある場合。
  • アクセシビリティのサポートを含めずにコンパイルされた Flash Player の環境で、ある種のアクセシビリティ関連メソッドを呼び出した場合。
  • mms.cfg での設定により、FileReference アクションが禁止されている場合。
  • ActionScript が、参照ダイアログボックスが既に表示されているときに FileReference.browse() 呼び出しを実行しようとした場合。
  • ActionScript が、FileReference オブジェクトでサポートされていないプロトコル (FTP など) を使用しようとした場合。
  • ランタイムプレーヤーでオーサリング時専用の機能を呼び出した場合。
  • タイムライン上に配置されたオブジェクトに対して名前を設定しようとした場合。

ActionScript 3.0 コンポーネントリファレンスガイド

状況を考えるとFTPかmms.cfgが怪しいなあ。

[追記:2008/05/29]

とりあえず現時点まででわかっていること。

  • SecurityErrorではない
  • 同じ環境でFileReference.uploadは正常に動作する(i.e., IllegalOperationErrorを吐かない)

これは参った。FileReference.uploadがIllegalOperationErrorを吐く条件はFileReference.loadがそれを吐く条件を網羅している。mms.cfg(Macromedia Security Configuration file)がなくてもFileReference.uploadは機能しているのでmms.cfgは何らかの動作を明示的に禁止する際に作成するものなんだと思う(わざわざ作成しないと動作の許可ができないとそれこそ不便きわまりない)。そうするとFileReference.loadがリモートサーバーで機能しない理由の候補としては

  • 現段階で本当に機能していない(将来的に動作するようになる)
  • リモートサーバーで機能する仕様ではない(リファレンスにはユーザーのローカルファイル云々の言及はあるがファイルロード先について一言も説明がないので不明)

まさかローカルファイルをローカルswfのみにロードできる機能ってことはないよね?

[追記:2008/05/29]

Flex Builder 3のリリースビルド(bin-release内)したものでエラーが出ることがわかった。bin-debugにコンパイルされたものはネットワーク上でも動く。どちらもFlash Player 10用にビルドされているはずなんだけど何でかな。

0 comments
Submit comment