使用 Webview 将对象从 Javascript 发送到 Kotlin

Posted

技术标签:

【中文标题】使用 Webview 将对象从 Javascript 发送到 Kotlin【英文标题】:Send Object from Javascript to Kotlin using Webview 【发布时间】:2020-01-12 19:33:55 【问题描述】:

我已经使用 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());
    

【问题讨论】:

【参考方案1】:

据我所知,javaScript 接口方法只接受原始类型的数据作为参数(如question 中所讨论的)。 如果您仍然想实现这一点,您可以在 javaScript 中序列化对象(例如 JSON 格式),然后在 Java 中反序列化它。 希望对你有帮助:)

【讨论】:

以上是关于使用 Webview 将对象从 Javascript 发送到 Kotlin的主要内容,如果未能解决你的问题,请参考以下文章

Android - 将 JSON 对象从 webview javascript 传递到 java

Swift - 从 WebView 获取 js 对象

包含 javascript 的图像不会出现在 webView 中

一手遮天 Android

WebView2:在 C# 中从 Javascript 代码设置对象属性

从 C++ 访问 QML WebView