[AS]Flash(AS3)におけるローディングバーが正常に動作しないときのひとつの理由
すげぇ、はまったのでメモしておきます。
まずは状況説明
- テスト環境(heteml)では何の問題もなくローディングバーが表示されていた。
- 本番環境(海外のよくわからんサーバー)にアップするとローディングバーの挙動がわけわからんようになった。
- FFだと常に100%表示で、IEとかChromeだと常に0%表示になってしまう。
数日悩んだ後、飲み会の席で某HIGE先生に相談したら1分で解決してくれました。
「サーバーがHttpヘッダにContentLength返さない仕様だとbytesTotalがおかしくなるよ」
「ブラウザごとで解釈が違うと思うよ」
サーバー側がContentLengthを返さないのが原因かもとのこと。
対策としては、あらかじめ読み込むファイルのサイズがわかってるなら、bytesTotalを使わずにバイト数を決め打ちで入力しておく。
ファイルサイズがわからんのなら、いっそ%表示のないポンデリングローダーにしちゃう。
そんな感じでOK。
ちなみに実はAS3のリファレンスにも書いてありました。
ダウンロードデータの合計バイト数を示します。このプロパティは、ロード操作の進行中は 0 を格納し、操作が完了した時点で設定されます。また、Content-Length ヘッダーがない場合、bytesTotal の値が不確定になります。
URLLoaderのbytesTotalの項目に書かれています。
がしかし、LoaderInfoのbytesTotalの項目にはこれ書いてないんですよね。。。
今回はswfの読み込みで発生したので、LoaderInfoのbytesTotalも同様の現象が起きますよ、ということ。
なんともいやらしい罠でした。
Tweet
2 Comments
こんにちは!ブログいつも拝見させていただいています!
私も以前、同じ罠にはまりました!
Contents-Lengthヘッダーを疑ったのですが、
追求していくとヘッダー情報は送信されていることが判明。
さらに調べていくと、サーバー側でSWFファイルに圧縮をかけていた事で、
サーバーからヘッダー情報を送信していても、ヘッダー情報からファイル容量が取得できない状況になっていることが原因だとわかりました。
私の場合は、SWFファイルは圧縮してもあまり容量が変わらなかったので圧縮しない設定にして解決しました!
ほんの一例ですが、ご参考までに〜!
>kanariiaさん
補足情報ありがとうございました!
サーバーサイドは勉強不足すぎてヤバイです!!