2011年12月7日水曜日

TitaniumのWebViewで変数を渡す

【Titanium Mobile】WebViewへ変数を渡す
http://www.johnnnnny.com/blog/?p=82


Titanium の WebView で HTML をホスト
http://akabeko.sakura.ne.jp/blog/2010/11/titanium-%E3%81%AE-webview-%E3%81%A7-html-%E3%82%92%E3%83%9B%E3%82%B9%E3%83%88/


ここらへんを見たんだけど、
要は、Evalするんで、Evalできるようなものじゃないとだめ。
難しいなー。難しくは無いんだけど、なんだろね。
【html側】
var test = function(obj){
$("#dummy").before(obj["val"]);
}

【Androidアプリ側】
var wv = Ti.UI.createWebView({url:"test.html"});
var btn = Ti.UI.createButton({title:"hoge",width:300,height:50});
btn.addEventListener = function(e){
var obj = {val:"hoge"};
var js  = "test(" + obj + ");";
webview.evalJS(js);
}

これで、btnを押したら、WebViewでhogeって文字が出て欲しい。
まぁ、勿論でないのは、わかる。動きません。

なんていうの?そのー、変数の実体を渡したいの。僕は。
でも、それが出来ないということなんだと思う。つまり。
つか、Evalなんだから、当たり前なんだけど。
つまり、オブジェクトを渡したいなら、
JSON化しなきゃならん。つまりそういうことなんだろうなと思う。
配列にせよ、同じなんだろうが。

コンテキストをまたいでデータを参照で共有する方法
http://ti.masuidrive.jp/topic.php?id=221#post-655

ここらへんかな?
まぁ、そういうわけなんで、解決方法としては、

var js = "test(" + obj + ");";

の部分を、

var js = "test(" + JSON.stringify(obj) + ");";

と書いてあげればいいです。
終了

0 件のコメント:

コメントを投稿