to:大津さん

neino-3です。
コメントありがとうございます。

ご指摘頂いた箇所、
if (self.sendXHR.readyState == 4) {
に修正するとIE6でもreadyStateの値を確認できました。
ありがとうございました。
stateChange()の中thisを使ってるところを同様に修正してとりあえず
IE6で動くことを確認できました。
# 私自身javascript歴浅いもので、全てselfに変えてしまってよいものか
# もう少し勉強します。。。

今日は時間が確保できずこれだけしか確認できなかったのですが、
他のブラウザでデグレードしないかもう少し検証して、
できればpull requestしてみたいと思います。

2012年8月29日水曜日 1時12分19秒 UTC+9 shigeki:
>
> 大津です。 
>
> IE6の環境は手元にないので実際に試せないのですが… 
>
> > 私の環境で調査したところ、socket.io-client のxhr.jsの以下の部分で、 
> > this.readyStateがIE6の場合 
> > undefinedで入ってきました。このため期待した分岐に入っていないのが原因っ 
> > ぽい気がしています。 
>
> ちょっとコードをざっと断片的に見ただけなんですが、 
>
> this.sendXHR.onreadystatechange = stateChange; 
>
> でハンドラを登録しているので readyState プロパティを管理しているのは 
> this (=XHR) ではなく、this.sendXHR じゃないのかなぁと思ったりします。 
>
> 実は this.sendXHR.readyState に値が入ってたりしませんかね? 
> (チェックしてもらえればすぐわかりますが) 
>
> 違ってたら実機でデバッグ頑張って下さいねとしか言えませんけど… 
> (でもこれが合っていても他にも地雷が埋まっていそうな感じ。) 
>
> (2012/08/28 23:11), neino-3 wrote: 
> > neino-3と申します。 
> > 
> > IE6でSocket.IOを使って通信方式をhtmlfileにした場合に 
> > 期待した動きにならず修正方法を検討しております。 
> > 
> > 自分の環境だけの問題ではなく、皆様の環境でも 
> > 発生する事象なのか念のため確認させて頂きたくメールさせて頂きました。 
> > # socket.ioのMLにも投げてみたのですが、私の英語がイマイチなのかもしれな 
> > い&IE6で 
> > # 使っている人がいないのかリアクションがなかったため、こちらに投稿させて 
> > 頂いた次第です。 
> > 
> > 問題の検証コードは以下に置いています。 
> > https://github.com/neino3/socket.io-client-htmlfile-ie6-problem 
> > 
> > 検証コードは、 
> > ・ページに配置したボタンが押されたらサーバに対してメッセージをsendする 
> > ・サーバは、クライアントからメッセージを受け取ったらコンソールに出力する 
> > という、単純なsocket.ioのプログラムです。 
> > 
> > これをIE6で動かした際、transportはhtmlfileで動きます。 
> > 1回目のsendは成功し、サーバ側コンソールにメッセージが表示されます。 
> > しかし、2回目以降はボタンを押してsendが呼ばれてもサーバへはメッセージが 
> > 送信されませんでした。 
> > IE6環境をお持ちの方がいらっしゃいましたら、上記検証コードで同様の 
> > 現象になるか確認してみて頂けないでしょうか? 
> > # もしご確認いただける場合はsocket.io-client 0.9.10でお願いします。 
> > # 0.9.10 以前のバージョンだと別のバグが原因でIE6でhtmlfileが動きません。 
> > 
>
> > 私の環境で調査したところ、socket.io-client のxhr.jsの以下の部分で、 
> > this.readyStateがIE6の場合 
> > undefinedで入ってきました。このため期待した分岐に入っていないのが原因っ 
> > ぽい気がしています。 
> > 
> https://github.com/LearnBoost/socket.io-client/blob/master/lib/transports/xhr.js#L101
>  
> > 
> > よろしくお願い致します。 
> > 
> > -- 
> > 
> > 
> > 
>
>

-- 



メールによる返信