如何在没有JS接口的情况下立即将值从JS函数返回到Java?

时间:2019-01-02 11:33:11

标签: javascript java android webview

我有一个网络视图。我想从Java调用JS函数,并将返回值分配给变量。

java的这一行调用JavaScript的getUserDetails()函数。

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

这是javascript中的getUserDetails函数,它返回一个字符串

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

我想实现这样的目标。

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

我该如何实现?

2 个答案:

答案 0 :(得分:0)

您必须更改调用该方法的方式。

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

,在处理警报时,您的返回值将在那里。 有关更多信息,请关注this link

根据评论,您可以按照以下方式进行操作。

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;
}

答案 1 :(得分:0)

建议使用

WebView#evaluateJavascript异步执行此操作。如果您想要同步的东西,可以尝试使用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();