繁体   English   中英

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

[英]How to return value from JS function to Java instantly without JS Interface?

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

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

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

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

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

我想实现这样的目标。

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

我怎样才能做到这一点?

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

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

建议使用WebView#evaluateJavascript异步执行此操作。 如果您想要同步的东西,可以尝试使用Future来等待回调:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM