天天看点

安卓Native和H5页面进行交互

安卓Native和H5页面进行交互

  1、H5页面调用安卓Native界面

    1)通过给webView添加JsInterface,安卓提供接口,让H5来进行调用

        a)安卓写一个类,里面的方法需要用通过注解来表明是java接口的方法。

      eg:

private  class WebInterface {
        @JavascriptInterface
        public void callFromJSBasicDataType(int x, float y, char c, boolean result) {
            String str = "-" + (x + 1) + "-" + (y + 1) + "-" + c + "-" + result;
            Log.e("tttt", "tttttt"+str);
        }
        @JavascriptInterface
        public void callAndroidMethod() {
            Log.e("tttt", "tttttt2");
        }
    }      

     b)设置webView可以支持js

      eg:

          webView.getSettings().setJavaScriptEnabled(true);

         c)给webView添加js接口类,并取别名

          webView.addJavascriptInterface(new WebInterface(), "robot");

    至此,安卓的配置完成了。

      下面配置HTML页面

      在代码中添加下面的代码,如果加载了页面了,就会调用起别名叫robot这个接口类里面的js接口方法

    <p>

        <button onclick="robot.callFromJSBasicDataType(1,2,'a',true);">点击我调用android 方法</button>

    </p>

    2)通过设置webview的setWebViewClient。安卓通过url跳转时的改变,来进行不同的操作

当webview加载的页面出现变化的时候,可以进行不同的操作,例如访问站外的网址,或者黑名单的网址进行提示

    eg:

wb.setWebViewClient(new Custom());
    
    private class Custom extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
            Log.e("tttt", url);
            if (url.contains("bai")) {
                Dialog d=new Dialog(MainActivity.this);
                d.setTitle("ttttt");
                d.show();
                return true;
            }
            return false;
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
        }
    }      

  2、安卓Native界面调用H5方法

主要就是通过webview的LoadUrl方法

eg:

webView.loadUrl("javascript:noParamFunction();");

注:需要页面加载完成之后调用才有效。因为js脚本需要完全加载到页面中才可以调用到,否则没有任何效果