Как вернуть значение из функции JS в Java мгновенно без интерфейса JS? - PullRequest
0 голосов
/ 02 января 2019

У меня есть веб-просмотр.Я хочу вызвать функцию JS из Java и присвоить возвращаемое значение переменной.

Эта строка из java вызывает функцию JavaScript getUserDetails ().

webview.loadUrl("javascript:window.getUserDetails()");

Это функция getUserDetails в javascriptкоторый возвращает строку

window.getUserDetails = function(){
    return "username"; 
}

Я хочу добиться чего-то подобного.

String user = webview.loadUrl("javascript:window.getUserDetails()");

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

WebView #valuJavascript - рекомендуемый способ сделать это асинхронно.Если вам нужно что-то синхронное, вы можете попробовать использовать Future s для ожидания обратного вызова:

final SettableFuture<String> jsFuture = SettableFuture<>.create();
webView.evaluateJavaScript("window.getUserDetails()", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String value) {
        jsFuture.set(value);
    }
});
String value = jsFuture.get();
0 голосов
/ 02 января 2019

Вы должны изменить способ вызова этого метода.

webview.loadUrl("javascript:alert(window.getUserDetails())");

, и при обработке предупреждения ваше возвращаемое значение будет там.Для получения дополнительной информации, пожалуйста, следуйте этой ссылке

Согласно комментарию вы можете сделать это следующим образом.

String  mUserName; 


String getUserName(){ 


runOnUiThread(new Runnable() {

        @Override
        public void run() {


webView.loadUrl("javascript:android.onData(window.getUserDetails())");

        }
    });

return mUserName;
}


@JavascriptInterface
public void onData(String value) {
   mUserName = value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...