【问题标题】:Passing String variable from Java to JavaScript via Webview (vice versa)通过 Webview 将字符串变量从 Java 传递到 JavaScript(反之亦然)
【发布时间】:2020-06-18 11:05:32
【问题描述】:

我正在尝试制作一个应用程序,两个用户可以通过 webview 进行交互。我想从 javascript 到 Java 获取一个 String 变量,以便我可以将它保存在我的 Sqlite 数据库中。(反之亦然)

【问题讨论】:

标签: javascript java android webview


【解决方案1】:

从 JavaScript 调用 Java/Kotlin 代码

Android WebView 有一个名为Javascript Interface 的功能,这是您应该寻找的。​​p>

它允许您从您的 javascript 代码运行您的 java/kotlin 代码。

你可以定义一个接口

val webView: WebView = findViewById(R.id.webview)
webView.addJavascriptInterface(WebAppInterface(this), "Android")

这里,WebAppInterface 定义了您希望从 javascript 中调用的方法。

/** 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()
     }
}

Android”这里是添加到您的 webview 的接口,可以在您的 javascript 代码中用于调用 Android 方法。

完成后,您可以从 javascript 中调用方法,

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast) {
    Android.showToast(toast);
}
</script>

请记住,接口回调并不总是在主线程中调用。因此,如果您想执行任何 UI 操作,请确保使用 runOnUiThread

从 Java/Kotlin 代码调用 JavaScript 函数

Android WebView 有一个名为 Evaluate Javascript 的功能,适用于 API 19+,可以从 java/kotlin 代码调用您的 javascript 函数。

例如,对于以下 javascript:

<script type="text/javascript">
function printName(name) {
    console.log(name); 
}
</script>

你可以写这段代码来调用这个JS函数:

yourWebview.evaluateJavascript("printName(\'TEST\')")

【讨论】:

  • 感谢您的帮助。您的回答似乎显示了如何从 Javascript 执行 Java 函数。如果我想从 Java 执行 Javascript 函数,我该怎么办? @Maulik Hirani
  • @MbulaMbomaJeangilbert,用从 Java/Kotlin 代码调用 JS 函数的解决方案更新了答案 :)
猜你喜欢
  • 2010-12-27
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 2020-10-18
相关资源
最近更新 更多