[Titanium Mobile]HTTPClientのSession(Cookie)をAndroidのWebViewに引き継ぐ
WordPressとやり取りするアプリをTitanium Mobileで開発しているときに、HTTPClientでログインしておいたのにWebViewを使うとセッションが引き継がれないので調査したときの覚書。
表示するだけならHTTPClientでGETして、WebViewのhtmlに流し込んだ方が簡単。
問い合わせフォームなど入力してPOSTするページはWebViewのurl指定で表示させたい。
Androidのみ。iOSは何もしなくても引き継がれる。
参考になったサイト。
環境: Titanium SDK 3.1.3.GA, WordPress 3.6.1
まずは、HTTPClientしたときのCookieを覚えておく
xhr = Titanium.Network.createHTTPClient();
xhr.onload = function() {
// Save cookie for Android WebView
if (this.getResponseHeader('set-cookie')) {
self.cookie = this.getResponseHeader('set-cookie');
}
}
その後、WebViewを使用するときにevalJSを使ってCookieをセットする
view = Titanium.UI.createWebView();
view.addEventListener('beforeload', function() {
cookie = self.cookie.split(/,\s(?=\w+=)/g);
cookie.forEach(function(item) {
item.split('; ').forEach(function(data) {
view.evalJS('document.cookie="' + data + '";');
});
});
});
これでcookieは設定できるけど、実際は下記のことをしなければ引き継げなかった。今後のバージョンアップで直っているかも。
- cookieをセットする前にdocument.cookieがなかったら強制的にreloadする。
- Aタグなどクリックした先でまた引き継げなかったので(Android 4.0.3)、セットしたときのURLと現在のURL(location.href, location.pathname)を比較して、違っていたらsetUrlする。
確認したのは、Android 2.3.3, Android 4.0.3
WebView内のCookieをリセットするにはアプリケーション管理の「データ消去」をする。
Titanium SDKのバージョンが上がるたびに動作確認しないとダメそう。
< Related Posts >