客户端调用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线程。