webView系列(三)----WebViewClient

 private WebViewClient mWebViewClient = new WebViewClient() {
        /**
         * 通知应用可以将当前的url存储在数据库中,意味着当前的访问url已经生效并被记录在内核当中。
         * 此方法在网页加载过程中只会被调用一次。
         * 此方法在进行加载url时会更新历史记录
         * @param view 正在启动回调的WebView。
         * @param url 正在访问的网址。
         * @param isReload true如果正在重新加载此URL。
         */
        @Override
        public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
            super.doUpdateVisitedHistory(view, url, isReload);
        }

        /**
         * 是否重新提交表单,默认不重发
         * @param view 正在启动回调的WebView。
         * @param dontResend 如果浏览器不应重新发送,则发送消息
         * @param resend 如果浏览器应重新发送数据,则发送消息
         */
        @Override
        public void onFormResubmission(WebView view, Message dontResend, Message resend) {
            //将此消息发送到指定的处理程序getTarget()。如果尚未设置此字段,则抛出空指针异常。
//            dontResend.sendToTarget();
            super.onFormResubmission(view, dontResend, resend);
        }

        /**
         * 将要加载资源(url)将要加载资源(url)
         * @param view 正在启动回调的WebView。
         * @param url WebView将加载的资源的URL。
         */
        @Override
        public void onLoadResource(WebView view, String url) {
            super.onLoadResource(view, url);
        }

        /**
         * 这个回调添加于API23,仅用于主框架的导航
         * 通知应用导航到之前页面时,其遗留的WebView内容将不再被绘制。
         * 此回调可用于确定使回收WebView可见的安全点 ,确保不显示陈旧内容。
         * 它最早被调用,可以保证WebView#onDraw不再从以前的导航中抽取任何内容。
         * 当HTTP响应的主体开始加载时,此方法被调用,反映在DOM中,并且将在后续绘制中可见
         * 这个回调发生在文档加载的早期,因此它的资源(css,和图像)可能不可用。
         * 如果需要更细粒度的视图更新,查看 postVisualStateCallback(long, WebView.VisualStateCallback).
         * 请注意这上边的所有条件也支持 postVisualStateCallback(long ,WebView.VisualStateCallback)
         * @param view
         * @param url
         */
        @Override
        public void onPageCommitVisible(WebView view, String url) {
            super.onPageCommitVisible(view, url);
        }

        /**
         * 页面(url)完成加载
         * @param view 正在启动回调的WebView。
         * @param url 页面的网址。
         */
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }

        /**
         * 页面(url)开始加载
         * @param view 正在启动回调的WebView。
         * @param url 要加载的网址。
         * @param favicon 此页面的favicon(如果它已存在于数据库中)。
         */
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        /**
         * 此方法添加于API21,在UI线程被调用
         * 处理SSL客户端证书请求,必要的话可显示一个UI来提供KEY。
         * 有三种响应方式:proceed()/cancel()/ignore(),默认行为是取消请求
         * 如果调用proceed()或cancel(),Webview 将在内存中保存响应结果且对相同的"host:port"不会再次调用 onReceivedClientCertRequest
         * 多数情况下,可通过KeyChain.choosePrivateKeyAlias启动一个Activity供用户选择合适的私钥
         *
         * @param view 正在启动回调的WebView
         * @param request 一个实例 ClientCertRequest
         */
        @Override
        public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) {
            super.onReceivedClientCertRequest(view, request);
        }

        /**
         * 此方法废弃于API23
         * 主框架加载资源时出错
         *
         * @param view 正在启动回调的WebView。
         * @param errorCode 与ERROR_ *值对应的错误代码。
         * @param description 描述错误的String。
         * @param failingUrl 无法加载的网址。
         */
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
        }

        /**
         * 此方法添加于API23
         * 加载资源时出错,通常意味着连接不到服务器
         * 由于所有资源加载错误都会调用此方法,所以此方法应尽量逻辑简单
         * @param view 正在启动回调的WebView。
         * @param request 原始请求。
         * @param error 发生错误的信息。
         */
        @Override
        @TargetApi(Build.VERSION_CODES.M)
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            //获取是否对主框架发出请求
            if (request.isForMainFrame()) {
                onReceivedError(view, error.getErrorCode(), error.getDescription().toString(), request.getUrl().toString());
            }
        }

        /**
         * 处理HTTP认证请求,默认行为是取消请求
         *
         * @param view 正在启动回调的WebView
         * @param handler HttpAuthHandler用于设置WebView的响应
         * @param host 需要身份验证的主机
         * @param realm 需要身份验证的领域
         */
        @Override
        public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
            super.onReceivedHttpAuthRequest(view, handler, host, realm);
        }

        /**
         * 此方法添加于API23
         * 在加载资源(iframe,image,js,css,ajax...)时收到了 HTTP 错误(状态码>=400)
         * 在此回调中执行的逻辑尽量简单
         *
         * @param view 正在启动回调的WebView。
         * @param request 原始请求。
         * @param errorResponse 发生错误的信息。
         */
        @Override
        public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
            super.onReceivedHttpError(view, request, errorResponse);
        }

        /**
         * 通知应用有个已授权账号自动登陆了
         * @param view 请求登录的WebView。
         * @param realm 用于查找帐户的帐户域。
         * @param account 可选帐户。如果不是null,则应根据设备上的帐户检查帐户。如果是有效帐户,则应使用该帐户登录用户。这个值可能是null。
         * @param args 用于登录用户的Authenticator特定参数。
         */
        @Override
        public void onReceivedLoginRequest(WebView view, String realm, String account, String args) {
            super.onReceivedLoginRequest(view, realm, account, args);
        }

        /**
         * 加载资源时发生了一个SSL错误,应用必需响应(继续请求或取消请求)
         * 处理决策可能被缓存用于后续的请求,默认行为是取消请求
         *
         * @param view 正在启动回调的WebView。
         * @param handler 一个SslErrorHandler将处理用户响应的。
         * @param error SSL错误对象。
         */
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            super.onReceivedSslError(view, handler, error);
        }

        /**
         * 给定WebView的渲染过程已退出。
         * 多个WebView实例可以与单个渲染过程相关联; 将为受影响的每个WebView调用onRenderProcessGone。
         * 应用程序的此回调实现应该只尝试清理作为参数提供的特定WebView,并且不应该假设其他WebView实例受到影响。
         * 给定的WebView不能使用,应该从视图层次结构中删除,应该清除对它的所有引用,例如Activity中的任何引用或使用View.findViewById(int)类似调用保存的其他类等。
         * 为了查找渲染崩溃原因以达到测试目的,我们可以调用loadUrl("chrome://crash")在WebView上。
         * 请注意,如果多个WebView实例共享渲染过程,则可能会受到影响,而不仅仅是加载了chrome:// crash的特定WebView。
         *
         * @param view 需要清理的WebView。
         * @param detail 退出的原因。。
         * @return true 如果主机应用程序处理了进程退出的情况,否则,如果渲染进程崩溃,应用程序将崩溃,或者如果渲染进程被系统杀死,则应用程序将被终止。
         */
        @Override
        public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) {
            return super.onRenderProcessGone(view, detail);
        }

        /**
         * 通过安全浏览通知主机应用程序已加载URL。
         * 应用程序必须调用回调以指示首选响应。
         * 默认行为是向用户显示插页式广告,并显示报告复选框。
         * 如果应用程序需要显示自己的自定义插页式UI,
         * 则可以使用SafeBrowsingResponse#backToSafety或异步调用回调SafeBrowsingResponse#proceed,具体取决于用户响应。
         *
         * SAFE_BROWSING_THREAT_*对应的值:
         * SAFE_BROWSING_THREAT_UNKNOWN :资源因未知原因被阻止。常数值:0(0x00000000)
         * SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE :资源被阻止,因为它包含不需要的软件。常数值:3(0x00000003)
         * SAFE_BROWSING_THREAT_PHISHING :资源被阻止,因为它包含欺骗性内容。常数值:2(0x00000002)
         * SAFE_BROWSING_THREAT_MALWARE :资源被阻止,因为它包含恶意软件。常数值:1(0x00000001)
         *
         * @param view 攻击恶意资源的WebView。
         * @param request 包含请求详细信息的对象。
         * @param threatType 安全浏览捕获资源的原因,对应于 SAFE_BROWSING_THREAT_*值。
         * @param callback 应用程序必须调用其中一个回调方法。
         */
        @Override
        public void onSafeBrowsingHit(WebView view, WebResourceRequest request, int threatType, SafeBrowsingResponse callback) {
            super.onSafeBrowsingHit(view, request, threatType, callback);
        }

        /**
         * 通知应用页面缩放系数变化
         * @param view 正在启动回调的WebView。
         * @param oldScale 旧的比例因子
         * @param newScale 新的比例因子
         */
        @Override
        public void onScaleChanged(WebView view, float oldScale, float newScale) {
            super.onScaleChanged(view, oldScale, newScale);
        }

        /**
         * 处理未被WebView消费的按键事件
         * WebView总是消费按键事件,除非是系统按键或shouldOverrideKeyEvent返回true
         * 此方法在按键事件分派时被异步调用
         *
         * @param view 正在启动回调的WebView。
         * @param event 关键事件。
         */
        @Override
        public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
            super.onUnhandledKeyEvent(view, event);
        }

        /**
         *
         * 拦截资源请求并返回响应数据,返回null时WebView将继续加载资源。否则,将使用返回响应和数据。
         *
         * 此回调被调用各种URL方案(例如http(s):,data:,file:等),不仅那些在网络上发送的请求方案。
         * 这不是针对javascript:URL,blob:URL或通过file:/// android_asset /或file:/// android_res / URLs访问的资产调用的。
         * 对于重定向,仅调用初始资源URL,而不是任何后续重定向URL。
         *
         * 注意:此方法在UI线程以外的线程上调用,因此客户端在访问私有数据或视图系统时应谨慎。
         *
         * 注意:启用安全浏览功能后,这些网址仍会进行安全浏览检查。
         * 如果不希望这样,请使用WebView#setSafeBrowsingWhitelist将URL列入白名单,
         * 或使用onSafeBrowsingHit(WebView,WebResourceRequest,int,SafeBrowsingResponse)忽略该警告。
         * @param view 请求资源的WebView。
         * @param url 资源的原始网址。
         * @return 包含响应信息的WebResourceResponse;如果WebView应加载资源本身,则为null。
         */
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            return super.shouldInterceptRequest(view, url);
        }

        /**
         * 此方法废弃于API21,调用于非UI线程
         * 拦截资源请求并返回响应数据,返回null时WebView将继续加载资源。否则,将使用返回响应和数据。
         *
         * 此回调被调用各种URL方案(例如http(s):,data:,file:等),不仅那些在网络上发送的请求方案。
         * 这不是针对javascript:URL,blob:URL或通过file:/// android_asset /或file:/// android_res / URLs访问的资产调用的。
         * 对于重定向,仅调用初始资源URL,而不是任何后续重定向URL。
         *
         * 注意:此方法在UI线程以外的线程上调用,因此客户端在访问私有数据或视图系统时应谨慎。
         *
         * 注意:启用安全浏览功能后,这些网址仍会进行安全浏览检查。
         * 如果不希望这样,请使用WebView#setSafeBrowsingWhitelist将URL列入白名单,
         * 或使用onSafeBrowsingHit(WebView,WebResourceRequest,int,SafeBrowsingResponse)忽略该警告。
         * @param view 请求资源的WebView。
         * @param request 资源的原始网址。
         * @return 包含响应信息的WebResourceResponse;如果WebView应加载资源本身,则为null。
         */
        @Override
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            return shouldInterceptRequest(view, request.getUrl().toString());
        }

        /**
         * 给应用一个机会处理按键事件
         * 例如 菜单快捷键事件需要以这种方式过滤。
         * 如果返回true,则WebView将不处理键事件。 如果返回false,WebView将始终处理键事件,
         * 因此视图链中的super都不会看到键事件。 默认行为返回false。
         * @param view 正在启动回调的WebView。
         * @param event 关键事件。
         * @return 如果主机应用程序想要处理键事件本身,则为true,否则返回false
         */
        @Override
        public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
            return super.shouldOverrideKeyEvent(view, event);
        }

        /**
         * 此方法在API24被废弃,不处理POST请求
         *
         * 当URL即将加载到当前WebView中时,为应用程序提供控制的机会。
         * 如果未提供WebViewClient,则默认情况下WebView将要求活动管理器为URL选择正确的处理程序。
         * 如果提供了WebViewClient,则返回true会导致当前WebView中止加载URL,而返回false会导致WebView像往常一样继续加载URL。
         *
         * 注意:不要使用请求的URL调用WebView#loadUrl(String),然后返回true。
         * 这会不必要地取消当前负载并使用相同的URL启动新的负载。
         * 继续加载给定URL的正确方法是简单地返回false,而不调用WebView#loadUrl(String)。
         *
         * 注意:不会为POST请求调用此方法。
         *
         * 注意:可以针对子帧和非HTTP(S)方案调用此方法; 使用这样的URL调用WebView#loadUrl(String)将失败。
         * @param view 正在启动回调的WebView。
         * @param url 要加载的URL。
         * @return 如果取消当前加载,则返回true,否则返回false。
         */
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }

        /**
         * 此方法添加于API24,不处理POST请求,可拦截处理子frame的非http请求
         *
         * 当URL即将加载到当前WebView中时,为应用程序提供控制的机会。
         * 如果未提供WebViewClient,则默认情况下WebView将要求活动管理器为URL选择正确的处理程序。
         * 如果提供了WebViewClient,则返回true会导致当前WebView中止加载URL,而返回false会导致WebView像往常一样继续加载URL。
         *
         * 注意:不要使用请求的URL调用WebView#loadUrl(String),然后返回true。
         * 这会不必要地取消当前负载并使用相同的URL启动新的负载。
         * 继续加载给定URL的正确方法是简单地返回false,而不调用WebView#loadUrl(String)。
         *
         * 注意:不会为POST请求调用此方法。
         *
         * 注意:可以针对子帧和非HTTP(S)方案调用此方法; 使用这样的URL调用WebView#loadUrl(String)将失败。
         * @param view 正在启动回调的WebView。
         * @param request 包含请求详细信息的对象。。
         * @return 如果取消当前加载,则返回true,否则返回false。
         */
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值