我有一个网络视图。我想从Java调用JS函数,并将返回值分配给变量。
java的这一行调用JavaScript的getUserDetails()函数。
webview.loadUrl("javascript:window.getUserDetails()");
这是javascript中的getUserDetails函数,它返回一个字符串
window.getUserDetails = function(){
return "username";
}
我想实现这样的目标。
String user = webview.loadUrl("javascript:window.getUserDetails()");
我该如何实现?
答案 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();