Firefox2とFlashからの外部データ読込

さっきのエントリよりも、こっちの方がFirefox2の致命的な問題。。
Firefox2で再生しているSWFから外部データを読み込もうとすると失敗するってヤツ。あ、主にローカル環境で、サーバーにアップしたら問題ナッシング。

現象を簡単にまとめると、Firefox2でHTMLごしにMovieClipLoaderクラス使って外部SWFの読込をテストしたところ、

(1) ローカル環境など、日本語パスが含まれているデータは読込不可
(2) 日本語パスが含まれていなければ読込可能(Cドライブ直下など)
(3) 同じデータをサーバーにアップすれば問題なし
(4) 上記(1)~(3)をIE6で行うとすべて問題なく読込できる
(5) Firefox1.5ならもちろん問題ない

という結果に。

つまり、Firefox2でHTMLごしにFlashの検証するときは、パスに日本語使うなってことで、それさえしなければOKのよう。

これ、何が致命的に問題かとういうと、「日本語のファイル名を使うな」ではなくて「日本語が含まれるパスで検証はできない」ということ。
SWFが相対パスで読込む外部データが日本語をまったく含まないファイル名だとしても、その上位フォルダに日本語が含まれると一切読み込めなくなる。むむむ・・・。
ということは、"デスクトップ"は日本語でダメなのでデスクトップで検証できないし、ユーザー名に日本語をつけている場合は、データは基本的に "日本語ユーザー名" フォルダの下位に配置されるので MyDocuments フォルダはすべて死ぬことに・・・。
Firefox2ではなくて、IEで検証すればよいだけなんだけど、日ごろFirefoxばっかり使っているからそれはちょっと・・・。

さらに検証を進めてみたんだけど、Firefox2では読込先のファイル名の日本語が化けて認識されるみたい。 相対的なファイルパスをダイナミックテキストフィールドに表示すると化け化け。
詳しいことはわからないけど、たぶんWindowsのファイルシステムの文字コード Shift-JIS と、Flash内部の文字コードUTFまわりが原因なんじゃないかと。
あ、外部データを相対パスではなくて、絶対パスにして行うとFirefox2でも問題なく読込が行われるという!!
var a_mcl = new MovieClipLoader();
a_mcl.loadClip("data.swf"); // 相対パスのため読込エラー
a_mcl.loadClip("file:///C|/Documents and Settings/(ユーザー名)/デスクトップ/data.swf"); // 絶対パスなら読込可能!

なんかパッチみたいなものをASのクラスで作ってみようかな・・・。ExternalInterfaceとか使ってJavaScriptからWindow.locationとか使ってみたらいけそうかも。でも時間ないなー。理ー無ー。

そう言えば豆知識として、この現象は一般にOpera9やFlash8から書き出したプロジェクタ形式でも再現性アリ。IEだけが特殊なんかな・・・。

Trackbacks

Trackback URL: http://blog.naggg.jp/mt/mt-tb.cgi/42

Send Your Comment