我已经使用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中将其反序列化。
希望能帮助到你 :)

07-28 07:33