客户端调用Web端方法
通常情况下,由于Web端是用来承载业务,客户端调用Web端的方法通常被用于异步回调操作。 Native调用Web端的方法主要有两种:
- WebView.loadUrl
- WebView. evaluateJavascript()
方法一 :WebView.loadUrl()
客户端:
拼接并调用JS端已有的方法
public void showJsAlert(View view) {
String msg="I am a msg from android";
String nativeCall = String.format("javascript:alertMsg('%s')", msg);
mWebview.loadUrl(nativeCall);
}
Web端:
提供对应方法:
function alertMsg(msg) {
alert(msg);
}
局限性
和JS调用Naitve的方法一相同,Native只能通过调用JS函数将并传递数据,也无法直接获取到JS的返回数据。
另外需要注意的是,只有当页面全部加载完毕后(onPageFinished
),才能正确地调用到相关的JS方法。
方法二 :WebView.evaluateJavascript()
客户端:
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void getJsMsg(View view) {
String msg="I am a msg from android";
String nativeCall = String.format("response2Native('%s')", msg);
mWebview.evaluateJavascript(nativeCall, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Toast.makeText(WebviewActivity.this,s,Toast.LENGTH_SHORT).show();
}
});
}
Web端:
提供相应方法:
function response2Native(m) {
alert(m);
return msg;
}
局限性
evaluateJavascript方法只能在Android 4.4系统后调用。
evaluateJavascript必须在主线程中执行,因此它的回调onReceiveValue也在主线程中。从调用到返回一直是在同步执行,因此需要注意不要阻塞UI线程。