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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章