我已经使用WebView组件加载了网页并添加了JavascriptInterface。请检查以下代码,
val webview = WebView(this)
setContentView(webview)
webview.settings.javaScriptEnabled = true
webview.loadUrl(HOME_PAGE_URL)
webview.addJavascriptInterface(JavascriptInterface(),”javascript_bridge”)
当我使用
window.javascript_bridge.showToast(“Information Saved”);
从Javascript调用调用时private inner class JavascriptInterface
{
@android.webkit.JavascriptInterface
fun showToast(text: String?)
{
Log.d("WEBVIEW", text);
}
}
我可以从Javascript到Kotlin调用该方法,而不会遇到任何麻烦。
但是现在我想像下面这样将对象从Javascript传递给Kotlin,
var info = {
message: “Information Saved”,
ID: 123456
}
当我使用
window.javascript_bridge.showToast(info);
从Javascript调用调用时我试图将数据类型更改为Any,但是从Javascript传递的值为null
private inner class JavascriptInterface
{
@android.webkit.JavascriptInterface
fun showToast(text: Any?)
{
Log.d("WEBVIEW", text.toString());
}
}
最佳答案
据我所知,javaScript接口(interface)方法仅接受原始数据类型作为参数(如本question所述)。
如果仍要实现此目的,则可以在javaScript中将对象序列化(例如,转换为JSON格式),然后在Java中将其反序列化。
希望能帮助到你 :)