duc*_*uck 2 android-webview kotlin android-jetpack android-jetpack-compose
WebAppInterface
使用Jetpack Compose时如何实现(webview的javascript接口)?
我正在关注这个文档
这是我到目前为止已经走了多远,但showToast()
没有被调用。添加@Composable
到showToast()
没有帮助。
/** 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)
您错过了所引用的文档中的一个步骤:
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)
归档时间: |
|
查看次数: |
4373 次 |
最近记录: |