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はもう少し様子見かな...
prototype.js 1.5.1に対応してみる ― 2007年05月02日 03時01分10秒
気が付いたら
prototype.jsが1.5.1になっていた。
なんとなく、prototype.jsを使えるようにで試した感じで1.5.1を読み込ませてみたら山ほどエラーがでるでる。
UAの判別を事前に行って、メソッドの組み立てそのものも最適化しているのか、読み込み時に実行されるコードが増えていたみたい。
なんとか対応してみました
try & error で何とか以下のコードに落ち着いたし。
// prototype.jsのためのダミー宣言(v1.5.0/1.5.1対応版) var window = { Element : null, ActiveXObject : ActiveXObject }; document = window.document = { getElementById : function() {}, getElementsByName : function() {}, getElementsByTagName : function() {}, createElement : function() { return { "__proto__" : {}, appendChild : function() {} }; }, createTextNode : function() {}, documentElement : null, body : null }; navigator = window.navigator = { appVersion : "", userAgent : "" }; HTMLElement = window.HTMLElement = { prototype : {} }; HTMLFormElement = window.HTMLFormElement = { prototype : {} }; HTMLInputElement = window.HTMLInputElement = { prototype : {} }; HTMLTextAreaElement = window.HTMLTextAreaElement = { prototype : {} }; HTMLSelectElement = window.SelectElement = { prototype : {} };考えてみると、こうまでして新しいverに対応しなくてもよかった気が...
最近のコメント