一、android与JS交互方式汇总

一、android端调用js代码有以下两种方式:

  1. 通过WebView的loadUrl()

    1
    2
    //callJS 是js端函数
    mWebView.loadUrl("javascript:callJS()");
  2. 通过WebView的evaluateJavascript()

    1
    2
    3
    4
    5
    6
    mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String value) {
    //此处为 js 返回的结果
    }
    });

优缺点对比:

  1. loadUrl 会刷新整个web页面,但兼容android4.4以下代码
  2. evaluateJavascript 方法的执行不会使页面刷新,效率更高。但只能在android4.4以上才能运行

    使用建议:

    两种方法混合使用,即Android 4.4以下使用方法1,Android 4.4以上方法2
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
    mWebView.loadUrl(url);
    } else {
    mWebView.evaluateJavascript(url, new ValueCallback() {
    @Override
    public void onReceiveValue(String value) {
        //此处为 js 返回的结果
    }
    
    });
    }

二、 JS通过WebView调用 Android 代码也有以下三种方式:

  1. 通过WebView的addJavascriptInterface()进行对象映射
    缺点:android4.2以下存在严重的漏洞问题 具体见 你不知道的 Android WebView 使用漏洞)

  2. 通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url

  3. 通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt()消息