1. hokutonikukyu

    Posted

    hokutonikukyu
Changes in title
+【Android】WebViewでWebStorage(LocalStorage)を使用・削除する方法
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,49 @@
+
+AndroidでWebViewを使用、Html5側でAndoid端末側のWebStorageにタブの位置などを保存することとなったため、対応。
+調査し、対応した結果をメモとして残しておきます。
+
+#使用方法
+Html5側で対応するだけではダメで、Android側のWebView定義の際、以下を行なう必要がある。
+
+```kotlin
+webView = view.findViewById(R.id.webview) as WebView
+
+// 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のタイミングなどで以下を実行することで削除が可能。
+
+
+```kotlin
+// 保存されているJavaScript WebStorage(LocalStorage)の削除
+WebStorage.getInstance().deleteAllData()
+```
+
+これにより、WebViewのヒストリーバック時や再読込時のみ、WebStorageが使用される。
+
+
+#感想
+iOSのWKWebViewではこの辺りは自動でやってくれているみたい。
+AndroidのWebViewめんど(ry
+もっといい方法あるよ!とか、ここはこうしたほうがいいよ!とかあったら教えていただきたいです。
+
+
+#参考サイト
+■HTML5のWebStorageを利用できるようにする
+http://www110.kir.jp/Android/ch0809.html
+
+■公式リファレンス
+https://developer.android.com/reference/android/webkit/WebStorage.html#deleteOrigin(java.lang.String)