通过 Webview 将字符串变量从 Java 传递到 JavaScript(反之亦然)

Passing String variable from Java to JavaScript via Webview (vice versa)

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

正在从 JavaScript

调用 Java/Kotlin 代码

Android WebView 有一项名为 Javascript Interface 的功能,您应该寻找它。

它允许您从 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 操作,请确保使用 运行OnUiThread.

从 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\')")