webview 处理

 @Override
    public void onPageFinished(WebView view, String url) {
        view.getSettings().setBlockNetworkImage(false);
      
        webViewClient.onPageFinished(view, url);
    }
    
     @Override
    public void onPageCommitVisible(WebView view, String url) {
        super.onPageCommitVisible(view, url);
    }
    
     public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
            
             public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        if (request.isForMainFrame()) {
        
        
         public void onReceivedHttpError(
            WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
    }
    
    
    public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
    
    
     WebSettings webSetting = this.getSettings();
        webSetting.setJavaScriptEnabled(true);
        webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
        webSetting.setAllowFileAccess(true);
        webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSetting.setSupportZoom(true);
        webSetting.setUseWideViewPort(true);
        webSetting.setSupportMultipleWindows(true);
        webSetting.setDomStorageEnabled(true);
        webSetting.setAppCacheEnabled(false);
        webSetting.setGeolocationEnabled(true);
        webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
        webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
        webSetting.setDefaultTextEncodingName("utf-8");
        webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            webSetting.setMixedContentMode(0);
        }
        webSetting.setUserAgentString(webSetting.getUserAgentString());
        webSetting.setAllowFileAccess(true);
        //                webSetting.setBlockNetworkImage(true);//同步请求图片
        webSetting.setBuiltInZoomControls(false);
        webSetting.setLoadWithOverviewMode(true);
        webSetting.setDatabaseEnabled(true);
        webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
    
    
}

    window.aaaa.openNotice();
    webview.loadUrl("javascript:getImgSrc()");
     webview.addJavascriptInterface(WebAppInterface, "aaaa");
        
        webview.loaddata("","text/html"):
     setWebChromeClient  
       @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                if (getActivity() != null && getActivity().isFinishing()) {
                    if (result != null) {
                        result.cancel();
                    }
                    return true;
                }
                return super.onJsAlert(view, url, message, result);
            }

            @Override
            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
                if (getActivity() != null && getActivity().isFinishing()) {
                    if (result != null) {
                        result.cancel();
                    }
                    return false;
                }
                return super.onJsPrompt(view, url, message, defaultValue, result);
            }
            
            
            Android6.0以上判断404或者500
重写WebViewClient()的onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse)方法,通过状态码判断;
Android 6.0以下判断404或者500
重写WebChromeClient()的onReceivedTitle(WebView view, String title)方法,通过标题是否包含“404”,"500","error"等字符判断;

断网或者超时判断(注意404或者500等其他非断网超时情况不走这个方法)
重写WebViewClient() 的onReceivedError(WebView view, int errorCode, String description, String failingUrl)


1.先看404的情况,果然进了onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse)方法,但是问题来了,正常的页面也返回404,去查了一下官方文档,发现一个请求页面任何资源的加载都会引发HTTP ERROR都会引起该方法的回调(例如页面的内部请求图标,或者图片等),
解决方法:
通过判断当前请求的url地址request.getUrl()是否等于根url,但是有一些请求地址通过request.getUrl()获取的url不等于根url,这个目前还没找到好的办法;
3.2 6.0以下系统测试
问题
1.先看404的情况,onReceivedTitle,这个方法还是有个别服务返回的标题不包含“404”,"500","error"等字符,暂时也没有好的解决方法;
3.3 超时测试
问题:
onReceivedError监听超时情况,需要很长时间,而webview请求的超时时间也不能控制,太影响用户体验;
解决办法:
在WebViewClient的onPageStarted(改方法是每个请求地址开始时调用),开启一个线程,设置一个时间监听,当超过这个时间,加载超时页面;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值