すげぇ、はまったのでメモしておきます。

まずは状況説明

  • テスト環境(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も同様の現象が起きますよ、ということ。
なんともいやらしい罠でした。