17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Android】WebViewでWebStorage(LocalStorage)を使用・削除する方法

Last updated at Posted at 2018-02-16

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

■公式リファレンス
https://developer.android.com/reference/android/webkit/WebStorage.html#deleteOrigin(java.lang.String)

17
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?