使用 Webview 将对象从 Javascript 发送到 Kotlin
Send Object from Javascript to Kotlin using Webview
我已经使用 WebView 组件加载了一个网页并添加了一个 Javascript 界面。请检查下面的代码,
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 接口方法只接受原始类型的数据作为参数(如本 question 所讨论)。
如果您仍想实现这一点,您可以在 javaScript 中序列化对象(例如 JSON 格式),然后在 Java 中反序列化它。
希望对您有所帮助:)
我已经使用 WebView 组件加载了一个网页并添加了一个 Javascript 界面。请检查下面的代码,
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”);
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);
我尝试将数据类型更改为Any,但是Javascript传来的值是null
private inner class JavascriptInterface
{
@android.webkit.JavascriptInterface
fun showToast(text: Any?)
{
Log.d("WEBVIEW", text.toString());
}
}
据我所知,javaScript 接口方法只接受原始类型的数据作为参数(如本 question 所讨论)。 如果您仍想实现这一点,您可以在 javaScript 中序列化对象(例如 JSON 格式),然后在 Java 中反序列化它。 希望对您有所帮助:)