[英]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.