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;


  • 相关阅读:
    The Quad
    将OrCAD Capture CIS的设计文件(.dsn)导入到PADS Logic VX.2.3
    OrCAD Capture CIS 16.6 将版本16.6的设计文件另存为版本16.2的设计文件
    Eclipse IDE 添加jar包到Java工程中
    PADS Logic VX.2.3 修改软件界面语言
    切换Allegro PCB Editor
    Allegro PCB Design GXL (legacy) 将brd文件另存为低版本文件
    Allegro PCB Design GXL (legacy) 设置自动保存brd文件
    Could not create an acl object: Role '16'
    windows 下apache开启FastCGI
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4251346.html
Copyright © 2011-2022 走看看