AndroidでWebViewを使用、Html5側でAndroid端末側のWebStorageにタブの位置などを保存することとなったため、対応。
調査し、対応した結果をメモとして残しておきます。
#使用方法
Html5側で対応するだけではダメで、Android側のWebView定義の際、以下を行なう必要がある。
webView = view.findViewById(R.id.webview) as WebView
// JavaScriptをONにする
webView.settings.javaScriptEnabled = true
// Storageの使用許可
webView.settings.domStorageEnabled = true
// API Level 19より前の場合はデータベースの保存場所の指定が必要
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
val path : String = this.getDir("データベースの名前", Context.MODE_PRIVATE).path
webView.settings.databasePath = path
}
#削除方法
上記で、Html5側からWebViewのWebStorageは使用出来るようになったが、1つ問題が発生。
ヒストリーバックでタブ位置など保存された状態を復元することはいいが、
WebViewを再生成した場合やアプリの再起動した後でも状態が保存されていた。
仕様にもよると思うが、今回は上記の場合はタブ位置を初期化させておきたいため、WebStorageを削除したい。
調査の結果、onCreateやonDestoryのタイミングなどで以下を実行することで削除が可能。
// 保存されているJavaScript WebStorage(LocalStorage)の削除
WebStorage.getInstance().deleteAllData()
これにより、WebViewのヒストリーバック時や再読込時のみ、WebStorageが使用される。
#感想
iOSのWKWebViewではこの辺りは自動でやってくれているみたい。
AndroidのWebViewめんど(ry
もっといい方法あるよ!とか、ここはこうしたほうがいいよ!とかあったら教えていただきたいです。
#参考サイト
■HTML5のWebStorageを利用できるようにする
http://www110.kir.jp/Android/ch0809.html