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;


  • 相关阅读:
    C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法
    C/C++——C语言数组名与指针
    C/C++——C语言跳出多重循环方法
    知识储备——国际象棋术语中英文对照
    C/C++——C语言库函数大全
    C/C++——C语言常用库函数
    C/C++——[05] 函数
    C/C++——[04] 语句
    C/C++——[03] 注释
    C/C++——[02] 运算符和表达式
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4251346.html
Copyright © 2011-2022 走看看