【Kotlin/Android】WebViewでJavaScriptのポップアップが表示されない原因と対応方法
この記事からわかること
- Kotlin/Android StudioでWebViewの使い方
- JavaScriptのwindow.alert()/window.confirm()が表示されない原因
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Koala
- Kotlin:1.9.0
WebViewでJavaScriptのポップアップが表示されない原因
AndroidアプリからWebViewでWebページを表示している際にJavaScriptで実装していたalert
とconfirm
が表示されない事象が発生しました。調べてみるとWKWebView
ではデフォルトではポップアップ表示に対応していないようです。
window.alert('Hello, World!')
window.confirm('Hello, World!')
⇧上記でポップアップ出るのでWebViewで開いて確認してみてください。
ポップアップを表示させる方法
WebView
でポップアップを表示させるにはWebChromeClient
のonJsAlert
とonJsConfirm
メソッドを活用します。
この2つのメソッドではJavaScriptで実装したalert
とconfirm
をネイティブ側のアラートへ繋ぎこむことができるようになります。confirm
で押下した後の処理もJsResult
のconfirm
またはcancel
メソッドを呼び出すことでJavaScript側の押下後の実装を問題なく動作させることが可能になっています。
private class MyWebChromeClient(private var context: Context) : WebChromeClient() {
/// JavaScriptのwindow.alert()を処理
override fun onJsAlert(
view: WebView,
url: String,
message: String,
result: JsResult,
): Boolean {
AlertDialog.Builder(context)
.setTitle("Alert")
.setMessage(message)
.setPositiveButton(
android.R.string.ok
) { dialog: DialogInterface?, which: Int -> result.confirm() }
.setCancelable(false)
.show()
return true
}
/// JavaScriptのwindow.confirm()を処理
override fun onJsConfirm(
view: WebView,
url: String,
message: String,
result: JsResult,
): Boolean {
AlertDialog.Builder(context)
.setTitle("Confirm")
.setMessage(message)
.setPositiveButton(
android.R.string.ok
) { dialog: DialogInterface?, which: Int -> result.confirm() }
.setNegativeButton(
android.R.string.cancel
) { dialog: DialogInterface?, which: Int -> result.cancel() }
.setCancelable(false)
.show()
return true
}
}
JavaScriptを有効にするのとWebChromeClient
のセットを忘れないように。
// JavaScriptを有効にする
binding.webView.settings.javaScriptEnabled = true
// ChromeClientをセット
binding.webView.webChromeClient = MyWebChromeClient(this)
binding.webView.loadUrl("https://appdev-room.com/android-uikit-wkwebview-js-alert")
これで無事WebViewからポップアップが表示されるようになりました。
iOSのWebViewでも同じです
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。