Android2系でXHRのLong Pollingができない問題に関して

1
kyo_ago @kyo_ago

Android 2.xでXMLHttpRequestの実装がおかしい気がする。long pollingしたいのにresponse未完了時でreadyState === 4になる(4系は正常)

2012-08-02 18:09:35
kyo_ago @kyo_ago

Android2.xのXHRはサーバからのレスポンスが遅延してもonloadstart呼び出し続けてくれない(さっさとreadyState === 4になって以後発火なし)

2012-08-02 18:46:40
kyo_ago @kyo_ago

onloadendもreadyState === 4のタイミングで呼び出されてるので読み込み完了が取れない

2012-08-02 18:47:23
kyo_ago @kyo_ago

今回はLong Polling出来ればいいから常にsetTimeoutでいける気がするけどPreLoader系には致命的なんじゃないか

2012-08-02 18:48:23
kyo_ago @kyo_ago

幾つかPreLoader系のコード読んだけど特に対策は入れてないっぽいのでcontentlengthない場合だけの症状なのかな

2012-08-02 18:51:32
kyo_ago @kyo_ago

あー、これキャッシュのせいか。URLにDate.nowつけたらonreadystatechangeが最後にちゃんと発火するようになった

2012-08-02 18:57:55
kyo_ago @kyo_ago

Android2系はreadyState === 1で読み込みを開始して、読み込み完了後にreadyState === 2と3と4が同時に発行される気がするんだけどなぁ。。。

2012-08-02 19:17:28
kyo_ago @kyo_ago

setInterval(log, 0)で確認してみたけど、readyStateが1~2の間だけ呼び出されてて2~4の間は呼び出されなかった

2012-08-02 19:21:17
kyo_ago @kyo_ago

ざっくりまとめた(あとで自分で確認するようなので最小再現コードじゃない) // Android2系でXHRのLong Pollingができない問題の検証コード(ざっくり内容) — Gist http://t.co/omsCTzBJ

2012-08-03 10:47:35
kyo_ago @kyo_ago

Android2.xはreadyState === 3が読み込み完了後にしか取れないし、読込中(readyState === 1)だとgetResponseHeaderやresponseTextも取れないからlong pollingできないっぽい

2012-08-02 19:54:01
kyo_ago @kyo_ago

Android2系の問題はこれか // Issue 13044 - android - Android Browser does not correctly support XMLHttpRequest streaming - http://t.co/rivTGbBT

2012-08-15 12:59:25
kyo_ago @kyo_ago

古いAndroidのデバッグとか最終的にはこれ使うのが最高だと悟った。もう最初からこれでいいかもしれない http://t.co/ogWWlOWU

2012-08-01 15:23:28