我正在尝试从webview中由javascript调用的方法调用WebView方法。然后Webview应该返回方法中使用的值。
html事件 - > javascript - > jSinterface - > android方法< - >网页视图
显然Webview在ui线程中运行而js没有,并且必须从同一个线程调用webview的方法。此方法可用于从非ui线程调用方法:
webView.post(new Runnable() {
public void run() {
webView.loadUrl("javascript:" + s + ";");
}
});
但我也希望返回结果。例如return webView.getUrl()
。我怎么能这样做?
答案 0 :(得分:1)
正如您所说,当您从JS调用JavaBridge的方法,然后从非ui线程调用您的类时,您必须使用侦听器/回调。完成loadUrl
后,调用您的侦听器传递所需的String url。
在本例中,我已经定义了一个带有onGetWebViewUrl
侦听器的内部接口。我通过在同一个类中实现接口来注册监听器,因此我可以轻松地调用它。
例如:
public class WebViewProxy implement WebViewListener {
private WebView mWebView;
...
@JavascriptInterface
public void onJsStuff(){
webView.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:" + s + ";");
WebViewProxy.this.onGetWebViewUrl(mWebView.getUrl());
}
});
}
@Override
public void onGetWebViewUrl(String url){
// call method 2 with this url
}
public interface WebViewListener {
void onGetWebViewUrl(String url);
}
}