Diary

Diary

日々学んだことをアウトプットする場として初めてみました

Jetpack Compose の Webview でリダイレクトされなかった

OAuth の連携画面を Jetpack Compose の Webview で表示していて、ログイン後にリダイレクトされないことがありました。

次のように javascript を有効にしてあげることで解決しました。
(リダイレクトに javascript が使われることが多々あるようです。)

@SuppressLint("SetJavaScriptEnabled")
@Composable
fun Login(url: String) {
    Log.d("hoge", "accessing $url ...")

    AndroidView(
        factory = ::WebView,
        update = { webView ->
            webView.webViewClient = WebViewClient()

            // default では false
            Log.d("webView.settings.javaScriptEnabled", webView.settings.javaScriptEnabled.toString())
            // default では false
            Log.d("webView.settings.javaScriptCanOpenWindowsAutomatically", webView.settings.javaScriptCanOpenWindowsAutomatically.toString())

            // js を有効化する。
            webView.settings.javaScriptEnabled = true
            webView.settings.javaScriptCanOpenWindowsAutomatically = true

            webView.loadUrl(url)
        }
    )
}

Android Studio 上で webView.settings.javaScriptEnabled = true のように js を有効にすると、以下の写真のように『XSS の危険性あるよ〜』って警告を出してくれます。
信頼のおけるサイトでのみ本設定を有効にするように注意しましょう。
(今回は SuppressLint をつけることで警告を無効化してます。)