Mbu*_*ert 2 javascript java android webview
我正在尝试制作一个应用程序,两个用户可以通过 webview 进行交互。我想从 javascript 获取一个 String 变量到 Java,以便我可以将它保存在我的 Sqlite 数据库中。(反之亦然)
从 JavaScript 调用 Java/Kotlin 代码
Android WebView 有一个名为Javascript Interface的功能,您应该寻找它。
它允许您从 javascript 代码运行 java/kotlin 代码。
您可以通过以下方式定义接口
val webView: WebView = findViewById(R.id.webview)
webView.addJavascriptInterface(WebAppInterface(this), "Android")
Run Code Online (Sandbox Code Playgroud)
在这里,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()
}
}
Run Code Online (Sandbox Code Playgroud)
“ 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>
Run Code Online (Sandbox Code Playgroud)
请记住,接口回调并不总是在主线程中调用。因此,如果您想执行任何 UI 操作,请确保使用runOnUiThread。
从 Java/Kotlin 代码调用 JavaScript 函数
Android WebView 有一个名为Evaluate Javascript for API 19+ 的功能,可以从 java/kotlin 代码调用您的 javascript 函数。
例如,对于以下 JavaScript:
<script type="text/javascript">
function printName(name) {
console.log(name);
}
</script>
Run Code Online (Sandbox Code Playgroud)
您可以编写以下代码来调用此 JS 函数:
yourWebview.evaluateJavascript("printName(\'TEST\')")
Run Code Online (Sandbox Code Playgroud)