ラベル webview の投稿を表示しています。 すべての投稿を表示
ラベル webview の投稿を表示しています。 すべての投稿を表示

2012年2月3日金曜日

Titanium (WebView) と no.de(Joyent)のSocket.io で WebSocket

をやってみた。取り合えず、エミュレータ(Android 2.2)で動かしてみている。
取り合えず、WebView で WebSocket できるかなーということで、
WebView のHTMLに Socket.io で通信するようなコードを書いてみたけど、
残念ながら、xhr-polling でやりとりするみたい。
接続が切れてしまうことがあるみたいなので、こりゃーだめだなー。
エミュレータ上で動くAndroidのバージョンを上げればいいのかも知れないけど、
前にバージョンをあげたらおかしなことになったので(笑)、やめておくことにします。
てか、動かして判ったけど、
WebViewのhtmlにDOMのデータを書き込む(つか、画像とかも読み込む)のにスゲーパワーを使うらしく、落ちる。
一気にデータを読み込むからねぇ。

前に書いたWebSocketプロトコルを Titanium にしゃべらせるやつでやってみます。

http://blog.masuidrive.jp/index.php/2011/12/04/socket-with-titanium/

これね。
つか、これを機会にコードを全部書き直そう。そうしようそうしよう。

2012年1月10日火曜日

Titanium の WebView で jQuery 読み込み時の遅延

すげーハマってました。
なかなかどうして難しいですね。

なんだろう。単純に考えると、

var win = Ti.UI.createWindow();
var wv  = Ti.UI.createWebView({url:"html/test.html");
win.add(wv);
win.open();
wv.addEventListener("load",function(){
 wv.evalJS("testFunc()");
});

ってやれば、WebViewであるwvの読み込み完了時に、
WebView で読み込んでいる test.html に記述された testFunc() が実行されるんだけど、
その test.html を読み込んだからといって、
test.html で script src してる CDN 上の jQuery.js の読み込みが完了していないっていう場合があるっぽい。
testFunc内で、$ とか使っていて、jQuery の読み込みが終わっていなければ、当然実行エラーになる。

んで、最初はどうしたかというと、
html/jQuery.js みたいに、ローカルにおいて、それを読み込めばいいじゃん!って思った。
しかしながら、なんか、Titanium で アプリを Deploy (製品状態にコンパイルする)時に、
jQuery.js でコンパイルエラーみたいになってうまくいかなかった。
仕方が無いから、 html/test.html に、 jQuery.js の中身を書いてやれ!と思って書いたんだけど、
今度は test.html のコンパイルエラーみたいになった。
まぁ、読み込んでいたのが jQuery1.6.2 だったからなのかもしれないけど。

仕方が無いので、wv.addEventListener() を書き換えました。

var win = Ti.UI.createWindow();
var wv  = Ti.UI.createWebView({url:"html/test.html");
win.add(wv);
win.open();
wv.addEventListener("load",function(){
 var timer = setInterval(function(){
  var jQReady = wv.evalJS("$.isReady");
  if(jQReady){
   clearInterval(timer);
   wv.evalJS("testFunc()");
  }
 },100);
});

0.1秒毎にjQueryの準備が出来たかどうかを返す、$.isReady を WebView に投げて、
jQuery の読み込みが無ければ $ もなにも無いんで、何も返ってこないんだけど、
読み込みが完了したら true が返るので、
そしたらタイマーをはずして testFunc を実行するようにしてみた。
一応は、動いてはいるんだけど、大丈夫かなー。
Android は、なんだか動きが良くわかりません。機種ごととかによって違うのかもだし。