webView使用

WebSettings webSettings = native_web.getSettings();
//无缓存模式加载(可以解决h5 css内高度控制失败问题)
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

native_web.getSettings().setDomStorageEnabled(true);
native_web.getSettings().setBlockNetworkImage(false);

webSettings.setJavaScriptEnabled(true);//android 与 h5约定的互通 "android" 为 tagnative_web.addJavascriptInterface(new JsInterface(), "android");// 设置拦截js中的三种弹框native_web.setWebChromeClient(new MyWebChromeClien());
 // 监听点击的每一个url,做自己的特殊处理用
native_web.setWebViewClient(new MyWebViewClient());


native_web.loadUrl(webUrl);

 
 

/**
     * 监听 所有点击的链接,如果拦截到我们需要的,就跳转到相对应的页面。
     */
    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d("webview", "url===>" + url);
            try {
                // 如果url满足某种特定的格式,则进行特殊处理
                if (url.contains("http://")) {
                    view.loadUrl(url);
                } else {
                    view.loadUrl(url);
                }
                return true;
            } catch (Exception e) {
                return true;
            }
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            Log.d("webview", "onPageStartedurl===>" + url);
            urlNow = url;
        }
    }





 
 
/**
     * 拦截js的提示框
     */
    private class MyWebChromeClien extends WebChromeClient {
        // 提示框
        @Override
        public boolean onJsPrompt(WebView view, String url, String message, String defaultValue,
                                  final JsPromptResult result) {
//			new AlertDialog.Builder(MyWebViewActivity.this).setMessage(message)
//					.setPositiveButton("确定", new DialogInterface.OnClickListener() {
//						@Override
//						public void onClick(DialogInterface dialog, int which) {
//							// 当弹出框点击的时候,手动用代码给js返回确认的信息
//							result.confirm("true");
//						}
//					}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
//						@Override
//						public void onClick(DialogInterface dialog, int which) {
//							result.cancel();
//						}
//					}).show();


            Navigator.startMyCardActivity(MyWebViewActivity.this, "我的产品");


            // 返回false会弹出原声dialog,这里不让原声的弹出
            return true;
        }

        // 警告框
        @SuppressLint("NewApi")
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {

            return true;
        }

        // 确认框
        @Override
        public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
            new AlertDialog.Builder(MyWebViewActivity.this).setMessage(message)
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 当弹出框点击的时候,手动用代码给js返回确认的信息
                            result.confirm();
                        }
                    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    result.cancel();
                }
            }).show();
            return true;
        }
    }

/**
     * 对应js中的调用方法
     */
    public class JsInterface {
        // 关闭当前页面
        @JavascriptInterface
        public void finish(){
            MyWebViewActivity.this.finish();
        }

        
    }



遇到的问题:

1.android 8.0 需要 return false 来重定向否则 wenview.cangoback() 方法会失效.

mWebContent.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
 if (Build.VERSION.SDK_INT < 26) {
                    view.loadUrl(url);
            Toast.makeText(SimpleWebActivity.this, "重定向,返回:true", Toast.LENGTH_SHORT).show();
            Toast.makeText(SimpleWebActivity.this, "版本号: "+Build.VERSION.SDK_INT + "   " + "型号: " + Build.MODEL, Toast.LENGTH_LONG).show();
                    return true;
                }

                return false;


猜你喜欢

转载自blog.csdn.net/qq_36029400/article/details/79481786