zoukankan      html  css  js  c++  java
  • 假设拦截WebView的错误和OS升级到4.4后链接不能点击的问题

    android OS升级到4.4之后,有些WebView的链接我们点击无效了,以下能够解决当中的某一种情况:

    webviewClient的shouldOverrideUrlLoading方法必须返回false,返回true会导致这个问题

    有时候PM会有一种需求,假设不是Server那边的问题,那么想在界面上显示自己定义的错误(如遇到连接到WIFI CMCC而没有移动的password,手机显示着连接上了WIFI)

    这时我们须要去截获WebView的error,能够通过重载setWebViewClient的方法去截获,能够參考google文档:点击这里打开


    在代码:

    <span style="white-space:pre">			</span>this.mWebView.setWebViewClient(new WebViewClient() {
    			public boolean shouldOverrideUrlLoading(WebView view, String url) {
    				if (url.startsWith(ReportActivity.this.getString(R.string.url_start_chars1)) 
    						|| url.startsWith(ReportActivity.this.getString(R.string.url_start_chars2))) {
    					view.loadUrl(url);
    				} else if(url.startsWith(ReportActivity.this.getString(R.string.url_start_chars3))){
    				    Uri uri=Uri.parse(url);
    			        Intent emailIntent=new Intent(Intent.ACTION_SENDTO, uri);
    			        List<ResolveInfo> availableSoft = getPackageManager().queryIntentActivities(emailIntent, PackageManager.MATCH_DEFAULT_ONLY);
    			        if (availableSoft.size() > 0) {
    			        	try {
    					startActivity(emailIntent);
    					} catch (Exception e) {
    							
    					}
    				}
    			    }
     				return false;
    			}
    			
    			@Override
    			public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    				handler.proceed();
    			}
    			
    			@Override
    			public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {  //这里截获错误
    				isLoadingError = true;
    				Toast.makeText(ReportActivity.this, "errorCode="+errorCode, Toast.LENGTH_LONG).show();
    				super.onReceivedError(view, errorCode, description, failingUrl);
    			}
    			
    			
    		});
    		
    		this.mWebView.setWebChromeClient(new WebChromeClient() {
    			
    			@Override
    			public void onProgressChanged(WebView view, int newProgress) {
    				if (newProgress >= 80) {
    					updateState(true);
    					System.out.println("=========isSuccess onProgressChanged isLoadingError="+isLoadingError);
    					if(isLoadingError) {
    						mState = State.GetDataError;
    					}
    					updateStateView();
    				}
    			}
    		});

    错误的类型有:

        // These ints must match up to the hidden values in EventHandler.
        /** Generic error */
        public static final int ERROR_UNKNOWN = -1;
        /** Server or proxy hostname lookup failed */
        public static final int ERROR_HOST_LOOKUP = -2;
        /** Unsupported authentication scheme (not basic or digest) */
        public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3;
        /** User authentication failed on server */
        public static final int ERROR_AUTHENTICATION = -4;
        /** User authentication failed on proxy */
        public static final int ERROR_PROXY_AUTHENTICATION = -5;
        /** Failed to connect to the server */
        public static final int ERROR_CONNECT = -6;
        /** Failed to read or write to the server */
        public static final int ERROR_IO = -7;
        /** Connection timed out */
        public static final int ERROR_TIMEOUT = -8;
        /** Too many redirects */
        public static final int ERROR_REDIRECT_LOOP = -9;
        /** Unsupported URI scheme */
        public static final int ERROR_UNSUPPORTED_SCHEME = -10;
        /** Failed to perform SSL handshake */
        public static final int ERROR_FAILED_SSL_HANDSHAKE = -11;
        /** Malformed URL */
        public static final int ERROR_BAD_URL = -12;
        /** Generic file error */
        public static final int ERROR_FILE = -13;
        /** File not found */
        public static final int ERROR_FILE_NOT_FOUND = -14;
        /** Too many requests during this load */
        public static final int ERROR_TOO_MANY_REQUESTS = -15;


  • 相关阅读:
    铁锨,挖土机,
    viewwillapear ,viewdidload,
    调用方法,for 选好调用方法,要避免哦
    原来多行就这么容易被我搞定了,自动的哈,
    睡觉会,
    小程序运行时相关信息
    小程序框架之视图层 View~获取界面节点信息
    小程序框架之视图层 View~基础组件
    微信小程序使用本地图片在真机不显示的问题
    小程序生命周期(onLaunch、onShow、onHide、onReady、onLoad、onUnloa)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4251346.html
Copyright © 2011-2022 走看看