JSDBを触ってみた[2] ― 2007年05月02日 01時02分55秒
あれれ、Streamでhttpが...
前回のエントリでローカルディスクからのprototype.jsの読み込みを行ったが、なんとなくhttp経由もやりたくなったのでちょっと試してみた。
js>var stream = new Stream("http://localhost/prototype.js") js>stream.readText()あれれ、ハマったまま帰ってこないよ。
気を取り直してもう一度
んじゃ、1行づつ読んでみるか。
js>var stream = new Stream("http://localhost/prototype.js") js>while( ! stream.eof ) { writeln( stream.readln() ); } /* Prototype JavaScript framework, version 1.4.0 * (c) 2005 Sam Stephensonあれれれれ、最後の「}」を出力しないでハマってるよ。: : element = element.offsetParent; } while (element); return [valueL, valueT]; }
もしかして...
prototype.jsのソース(1.4.0ね)を確認したところ、Safari対応の条件判断のifブロックを閉じた後に改行なしでEOFになっていた。
もしや、と思ってその後に改行を1つ入れたところ、2番目のコードで最後まで読み込んで制御が戻ってきた。
...って、! stream.eof が真にならないの!?
さらに
改行追加版のソースにしても、最初の stream.readText() はやはり制御を返さないし。
あと、テキスト操作のせいかわからんが、posやpositionプロパティは常に0のまま。どういうこっちゃ。
ここまでの暫定結論
http読み出しはXHRを使うしかないな。と思ったら、XMLHttpRequestの実装、ないのか。
ってことは、ActiveX使えってか?うむ、JSDBはもう少し様子見かな...
コメント
_ mal ― 2007年05月04日 20時30分12秒
_ dara-j ― 2007年05月04日 21時44分43秒
stream.read()もreadText()と同じく一括読み込みに使えるんですね。知らんかった。
が、やはり末尾に改行がない場合はそのまま制御が戻ってこないようです。
テストではローカルのIISで試していたので、他のwebサーバではどうかな、と思い、最新のprototype.js(v1.5.1)を公式サイトから直接呼び出してみたんですが、これまた末尾が改行じゃないため同じようにハングアップ状態になりました。
これ、おそらくJSDBのバグだと思うんですよねぇ。このあたりがfixされるまでは、new ActiveX("Microsoft.XMLHTTP")を使うしかないかな、と個人的には思ってます。
_ mal ― 2007年05月05日 15時48分04秒
cygwin,mingw の bash -> 正常に取得
cmd.exe -> 取得できない、ただし制御不能にはならない。
cmd.exe の場合、html ならば取得できる。
バグでしょうが、環境依存してるのかも。私は w2k です。
_ dara-j ― 2007年05月05日 22時33分53秒
別エントリ立てますが、結論から言うと正常に取得できます。
malさん、コメント本当にどうもです。コメントいただかなかったら「バグだ」と思ったまま放置の方向でした。
いや~、はずかし。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
トラックバック
このエントリのトラックバックURL: http://dara-j.asablo.jp/blog/2007/05/02/1477124/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
2. なぜか http response header までついて来るので切る。
3. eval なりなんなり。
でいけるかと。
どーも JSDB は一括で読み込んでから処理でないと bug (なのかなぁ) が多い。