使用Jetpack Compose时如何通过Webview实现javascript接口?

duc*_*uck 2 android-webview kotlin android-jetpack android-jetpack-compose

WebAppInterface使用Jetpack Compose时如何实现(webview的javascript接口)?

我正在关注这个文档

这是我到目前为止已经走了多远,但showToast()没有被调用。添加@ComposableshowToast()没有帮助。

/** Instantiate the interface and set the context  */
class WebAppInterface(private val mContext: Context) {
    /** Show a toast from the web page  */
    @JavascriptInterface
    fun showToast(toast: String) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show()
    }
}

@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebPageScreen(urlToRender: String) {
    AndroidView(factory = {
        WebView(it).apply {
            layoutParams = ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
            )
            webViewClient = WebViewClient()
            addJavascriptInterface(WebAppInterface(getContext()), "Android")
            loadUrl(urlToRender)
        }
    }, update = {
        it.loadUrl(urlToRender)
    })
}
Run Code Online (Sandbox Code Playgroud)

Android 文档中的 HTML/JS 代码:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

Phi*_*hov 6

您错过了所引用的文档中的一个步骤:

WebView(context).apply {
    layoutParams = ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT
    )
    webViewClient = WebViewClient()
    settings.javaScriptEnabled = true // <-- This line
    addJavascriptInterface(WebAppInterface(getContext()), "Android")
}
Run Code Online (Sandbox Code Playgroud)