Как передать возвращаемые значения из функции javascript в android?

Я хочу, чтобы мое приложение android вызывало функцию, написанную в javascript, и ожидало от нее возвращаемое значение.

Я понимаю, что WebView.loadUrl работает асинхронно, поэтому теперь я хочу, чтобы javascript уведомил мое приложение для Android, когда это будет сделано, и передайте возвращаемое значение, вызвав функцию java, используя javascriptinterface.

Интересно, есть ли лучшие способы сделать это и кто-нибудь заметил какую-либо потерю сообщений между javascript и android.

Ответ 1

У меня возникла ваша проблема.

Имейте JS-функцию, подобную этой.

function androidResponse() {
   window.cpjs.sendToAndroid("I am being sent to Android.");
}

Настройте Android (Java).

Иметь последний класс, подобный этому

final class IJavascriptHandler {
   IJavascriptHandler() {
   }

   // This annotation is required in Jelly Bean and later:
   @JavascriptInterface
   public void sendToAndroid(String text) {
      // this is called from JS with passed value
      Toast t = Toast.makeText(getApplicationContext(), text, 2000);
      t.show();
   }
}

Тогда на вашем загружении WebView есть.

webView.addJavascriptInterface(new IJavascriptHandler(), "cpjs");

Функция вызова JS

webView.loadUrl("javascript:androidResponse();void(0)");

ОБНОВЛЕНО


Кроме того, у меня было очень плохое время, когда я сталкивался с проблемами, передавая сотни строк строки JS из Java, и у меня есть последующая публикация в StackOverflow без хороших ответов, но, наконец, она разрешила его, зная, что problme имеет специальные символы внутри строки, поэтому возьмите специальные символов, когда вы используете строку, проходящую взад и вперед.

Передача данных из Javascript в Android WebView

Строка HTML внутри вложенной строки

Символы HTML TextArea ограничены внутри Android WebView