Android实现H5与Native交互的几种方式

Android中使用控件WebView来承载展示H5,那么Java本地方法调用H5中的Js方法同样也要用到WebView对应的Api。

Java本地方法调js

通过WebView调用

  • loadUrl(String)方法执行js
  • evaluateJavascript(String, ValueCallback)执行js,注意:此方法只支持android.os.Build.VERSION_CODES.N及以上

利用JsBridge

引用第三方库 JsBridge

js调用Java本地方法

通过WebView调用

  1. 初始化WebSettings
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
  1. 创建一个提供给js调用的方法类JsMethod
public class JsMethod {
    ...

    @JavascriptInterface
    public static void launch(String act) {
        Class<Activity> cls = null;
        try {
            cls = (Class<Activity>) Class.forName(act);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if (cls != null) {
            Intent intent = new Intent(context, cls);
            context.startActivity(intent);
        }
    }
}

注意: andorid4.2及以上,必须加JavascriptInterface注解,否则js无法调用android方法

  1. 将方法类JsMethod给WebView
JsMethod method = new JsMethod(this, webview);
webView.addJavascriptInterface(method, "jsCallee");

注意:此处的第二个参数必须跟js里面调用方法的对象的名称保持一致

  1. js端调用
function launch(){
  window.jsCallee.launch("com.demo.MainAcitivity");
}

通过Url拦截

android中通过WebView#setWebViewClient(WebViewClient)设置WebViewClient,通过WebViewClient中的shouldOverrideUrlLoading方法拦截并解析Url。

webview.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //解析url
        return super.shouldOverrideUrlLoading(view, url);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        //解析url
        return super.shouldOverrideUrlLoading(view, request);
    }
});

注意:shouldOverrideUrlLoading()方法的返回值:

  1. 返回true,即根据代码逻辑执行相应操作,webview不加载该url
  2. 返回false,除执行相应代码外,webview加载该url
  3. 返回super.shouldOverrideUrlLoading(),其实返回的还是false

对比

  • 通过addJavascriptInterface()方式调用Java本地方法只适用于Android,iOS不行,这样就必须写两套
  • 通过Url拦截方法两边都适用,并且可以在业务比较复杂的情况下复用Url解析规则,降低维护成本,但是一旦规则太多了之后会出现很多条件判断,所以要提前做好分类处理,不要把所有规则的处理放到一个类里面

感谢大家的支持,如有错误请指正,如需转载请标明原文出处!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值