Js 与Android WebView

一、JS调用Android Java交互

1、WebView初始化及配置:

 private void initWebView() {
 //配置可与JS交互
        wb.getSettings().setJavaScriptEnabled(true);
//配置协议agreement       
        wb.addJavascriptInterface(new BIDYCAgreetment(context, handler), "agreement");

        wb.getSettings().setAllowFileAccess(true);
        wb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        wb.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        // 支持缩放 V4.9 add by Able  先注释,可能5.0或许会打开 续:V5.1打开的
        wb.getSettings().setBuiltInZoomControls(true);
        wb.getSettings().setSupportZoom(true);
        // 电脑网页最小化适配手机屏幕 V4.9 add by Able  先注释,可能5.0或许会打开 续:V5.1打开的
        wb.getSettings().setUseWideViewPort(true);
        wb.getSettings().setLoadWithOverviewMode(true);

        WebSettings setting = wb.getSettings();
        // 因为zhizao.tudou.com打不开图片-start
        setting.setDomStorageEnabled(true);
        setting.setAppCacheMaxSize(1024 * 1024 * 8);
        setting.setAppCacheEnabled(true);
        // 因为zhizao.tudou.com打不开图片-end

        setting.setCacheMode(WebSettings.LOAD_NO_CACHE);
        setting.setNeedInitialFocus(false);
        setting.setSaveFormData(true);
        setting.setSavePassword(false);
        wb.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//不跳至其他浏览器,在本页面加载url            
                wb.loadUrl(url);
                return true;
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                Loading.show(context);

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                handler.sendEmptyMessage(MESSAGE_LOAD_SUCCESS);
                Loading.dismiss();
            }

            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                super.onReceivedError(view, errorCode, description, failingUrl);
                YoukuLoading.dismiss();
                handler.sendEmptyMessage(MESSAGE_TIME_OUT);
            }
        });

        wb.requestFocus();
        wb.loadUrl("http://csi.xxxxx.com/mdyc/index.php");
    }

2、定义交互协议类:

public class BIDYCAgreetment {
    public static final int HIDENAV = 10;
    public static final int ActiveNAV1 = 11;
    public static final int ActiveNAV2 = 12;
    public static final int ActiveNAV3 = 13;

    private Context context;
    private Handler mHandler;

    public BIDYCAgreetment(Context context, Handler handler) {
        this.context = context;
        this.mHandler = handler;
    }

    @JavascriptInterface
    public void hidenav() {
        if (!Util.hasInternet()) {
            Util.showTips(R.string.none_network);
            return;
        }
        Logger.d("js-----","----->hidenav");
        if (mHandler != null) {
            mHandler.sendEmptyMessage(HIDENAV);
        }
    }
//定义JS交互接口,交互方法activenav(),交互参数nav1,nav2
    @JavascriptInterface
    public void activenav(final  String nav1, final String nav2) {
        if (!Util.hasInternet()) {
            Util.showTips(R.string.none_network);
            return;
        }
        if (mHandler!=null){
            Message msg3 =new Message();
            msg3.obj=nav2;
            msg3.what=ActiveNAV3;
            mHandler.sendMessage(msg3);

            Message msg2=new Message();
            msg2.obj=nav1;
            msg2.what=ActiveNAV2;
            mHandler.sendMessage(msg2);
        }
    }

    @JavascriptInterface
    public void activenav(final String nav1){
        if (!Util.hasInternet()) {
            Util.showTips(R.string.none_network);
            return;
        }
        if (mHandler != null) {
            Message msg1=new Message();
            msg1.obj=nav1;
            msg1.what=ActiveNAV1;
            mHandler.sendMessage(msg1);
        }
    }
}
3、Js中的相关定义

<script> 
 if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {//ios
            var url = 'agreement::activenav:nav1=4&nav2=3';
            sendUrlToNative(url);
        }else{//android
            window.agreement.activenav(4,3);//Android 定义传递协议、及方法、参数形式
        }
</script>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值