【Kotlin/Android】WebViewでJavaScriptのポップアップが表示されない原因と対応方法

【Kotlin/Android】WebViewでJavaScriptのポップアップが表示されない原因と対応方法

この記事からわかること

  • Kotlin/Android StudioWebView使い方
  • JavaScriptwindow.alert()/window.confirm()表示されない原因

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

WebViewでJavaScriptのポップアップが表示されない原因

AndroidアプリからWebViewでWebページを表示している際にJavaScriptで実装していたalertconfirmが表示されない事象が発生しました。調べてみるとWKWebViewではデフォルトではポップアップ表示に対応していないようです。


window.alert('Hello, World!')

window.confirm('Hello, World!')

⇧上記でポップアップ出るのでWebViewで開いて確認してみてください。

ポップアップを表示させる方法

WebViewポップアップを表示させるにはWebChromeClientonJsAlertonJsConfirmメソッドを活用します。

この2つのメソッドではJavaScriptで実装したalertconfirmネイティブ側のアラートへ繋ぎこむことができるようになります。confirmで押下した後の処理もJsResultconfirmまたは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からポップアップが表示されるようになりました。

【Kotlin/Android Studio】WebViewの実装方法!WebサイトやHTMLを表示する

iOSのWebViewでも同じです

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index