Передача строковой переменной из Java в JavaScript через Webview (наоборот) - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь создать приложение, в котором два пользователя могут взаимодействовать через веб-просмотр. Я хочу получить строковую переменную от javascript до Java, чтобы сохранить ее в своей базе данных Sqlite (и наоборот)

1 Ответ

3 голосов
/ 12 июля 2020

Вызов Java / Kotlin код из JavaScript

Есть функция Android WebView, называемая Javascript Интерфейс , что вам и нужно ищите.

Это позволяет вам запускать код java / kotlin из кода javascript.

Вы можете определить интерфейс с помощью

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» вот интерфейс, добавленный в ваш веб-просмотр и может использоваться в вашем коде javascript для вызова Android методов.

Как только это будет сделано, вы можете вызывать методы из ваших javascript,

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

Сохранить в помните, что обратные вызовы интерфейса не всегда вызываются в основном потоке. Итак, если вы хотите выполнить какие-либо операции пользовательского интерфейса, убедитесь, что вы используете runOnUiThread .

Вызов функции JavaScript из Java / Kotlin код

В Android WebView есть функция Evaluate Javascript для API 19+ для вызова ваших javascript функций из кода java / kotlin.

Например, для следующих javascript:

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

Вы можете написать этот код для вызова этой JS функции:

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