WebView设置WebViewClient的方法

WebView设置WebViewClient的方法

shouldOverrideUrlLoading:

在web页面里单击链接的时候,会自动调用android自带的浏览器来打开链接,需要通过该方法在本页面打开;

 @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
  view.loadUrl(url);
  return true;
  }
onLoadResource:加载资源时响应
onPageStart:在加载页面时响应
onPageFinish:在加载页面结束时响应
onReceiveError:在加载出错时响应
onReceivedHttpAuthRequest:

公共方法

doUpdateVisitedHistory(WebView view,String url,boolean isReload)

通知主机应用程序更新其访问数据库的链接。(貌似可以理解成WebView内容变化后,数据库储存的历史记录也变化了,需要更新)

onFormResubmission(WebView view,Message dontResend,Message resend)

在应用程序中,如果浏览器需要重新加载页面数据,这个页面必须是属于POST请求,默认情况下,是不会发送重新加载数据.

onLoadResource(WebView view,String url)

当WebView加载特定的资源时,会通知WebView所请求的Url.

onPageCommitVisible(WebView view,String url)

(1)通知应用程序,WebView之前页面遗留的内容,将不会在加载和绘制.

(2)这个回调被使用在WebView内容安全的回收,确保不会显示陈旧的内容.

(3)它能够在最早被调用,以此来保证onDraw(Canvas)在以前的界面不会绘制任何内容,接下来需要绘制的内容background color或者需要加载的新内容.

(4)这个方法会在Http的Body已经加载,已经反映在DOM上,并且将会在其可见的时候绘制.这个回调发生在文档(document)加载的早期,因此它的资源(css,和图像)可能是拿不到的.

(5)如果需要更细粒度的视图更新,具体到元素,<标签/>,需要了解postVisualStateCallback(long, WebView.VisualStateCallback).

(6)请注意这上边的所有条件也支持postVisualStateCallback(long ,WebView.VisualStateCallback)   

void onPageFinished(webView view,String url)

通知应用程序页面已经完成加载,只有主框架才能调用此方法,当onPageFinish()被调用时,呈现图片可能还没有被更新.新照片的通知更新,请使用onNewPicture(WebView,Picture)

onPageStarted(WebView view,String url,Bitmap favicon)

通知应用程序已经开始进行页面加载,这个方法,在每个主框架加载一个页面或者一个内置页框都会被调用.这也意味着onPageStarted将不会发生在嵌入式的框架内的内容变化,就像单击链接目标.

onReceivedClientCertRequest(WebView view,ClientCertRe)

通知应用程序来处理一个SSL客户证书请求,应用程序负责提示用户输入钥匙.

有三种处理方式:

进行proceed()

取消cancel()

无视ignore()

WebView将会储存在响应内存(特指App还存活)的进行(proceed)和取消(cancel)的操作,并且onReceivedClientCertRequest()在遇到相似的host和port,不会对用户进行通知,但是无视(ignore)状态在WebView中不会储存,下次还会继续提示.

注意:

(1)谷歌的Chromium(引擎)可能会缓存这些响应,所以当前情况下,忽略可能是影响最小的一个选择.

(2)如果在UI线程使用,这个连接可能被暂停.

(3)在大多数情况,这个应用程序项目,应该实现KeyChainAliasCallback这个接口,并且将这个接口传递给choosePrivateKeyAlias(Activity,KeyChainAliasCallback,String[],Principal[],Uri,String)并且给User(用户)选择一个别名来开始这个活动.

(4)这个活动的钥匙串将通过接口回调的方式实现.

(5)下一个App应该通过创建一个异步任务通过getPrivateKey(Context,String)方法来获得这个(Key)钥匙.

(6)这个方法在AOSP浏览器的默认行为是取消(cancel),并且不返回客户端证书.

在API 23被遗弃.

onReceivedError
(
WebView view,
int errorCode,
String descrption,
String failingUrl
)

向应用程序报告错误,这个错误都是不可恢复的(这些资源不可以被使用).errorCode参数对应一个ERROR_*常量.

onReceiver(Webview view,
WebResourceRequest request,
WebResourceError error)

向应用程序报告Web资源加载错误.这些错误通常会显示无法连接到服务器,回调时注意与弃用版本,新版本将针对任何资源(iframe,picture),不仅针对主页面,因此,建议在这个回调上执行加载资源错误的 通用的处理情况.

onReceivedHttpAuthRequest(Webview view.
HttpAuthHandler handler,
String host,
String realm)

通知应用程序接收WebView上面的HTTP身份验证请求.应用程序可以使用提供的HttpAuthHandler来设置对WebView上面请求的回应.默认的行为是取消请求.

onReceivedHttpError(WebView view,
WebResourceRequest request,
WebResourceResponse errorResponse)

通知App在从服务器端接收到HTTP错误,并且==HTTP的错误状态码>=400==,这个回调将对任何资源(iframe,picture等)不仅对主页面.因为,建议在这个回调上面执行最普遍的处理,处理通用事件.

==注意:服务器响应的内容可能在errorResponse中找不到.==

onReceivedLoginRequest(Webview view,
String realm
String account
String args)

通知应用程序自动用户登录已经被处理.

onReceiverSslError(WebView view,
SslErrorHandler handler
SslError error)

通知应用程序加载资源时发生SSL错误,主机应用程序必须调用handler.cancel()或者handler.proceed().注意,这个决定可能被保留应对未来的SSL错误,默认的行为是取消(cancel)加载.

onScaleChange(WebView view,
float oldScale,
float newScale)

通知APP对于WebView的比例大小已经发生变化.

onUnhandledKeyEvent(WebView view,KeyEvent event)

通知应用这个事件没有在WebView声明,除了系统事件,WebView总是消费普通的事件,或者设置shouldOverrideKeyEvent方法返回值为true.

这个事件的发出,属于异步的发出,它给应用程序机会来处理这些不能处理的关键性事件.

WebResourceResponse shouldInterceptRequest(
WebView view,
WebResourceRequest request)

通知应用程序一个资源请求,并且允许应用程序返回数据.如果返回值为null,这个WebView将会继续加载普通的资源请求.否则,返回响应的数据将会被使用.

注意:这个方法将在非主线程调用.所以客户端在访问私有数据或者UI视图时需要谨慎行事.

boolean shouldOverrideKeyEvent(WebView view
,KeyEvent event)

赋予应用程序能够处理异步事件的机会.

eg:菜单的快捷键需要先被过滤.

如果方法返回true,WebView将不会处理该事件,如果返回false,那么WebView将会一直处理该事件,所以没有超级链接也能看到该事件.

这个默认行为是返回false.

shouldOverrideUrlLoading(WebView view
WebResourceRequest request)

使主机应用程序能够控制,当一个新的Url加载到当前的WebView.

如果没有提供WebViewClient,默认情况下WebView会询问Activity Manager 去选择来适当的处理当前的Url,如果WebViewClient被提供,返回true,意味着主机程序来处理url,而返回false意味着当前WebView处理url.

如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 在Android系统中使用WebViewClient处理跳转URL的方法

    前言 最近代码里和WebView有很多的交互,webview是android中的浏览器控件,这里主要介绍一下webview如何重载WebViewClient类来控制URL加载. 使用WebViewClient 使用WebViewClinet主要是继承WebViewClient父类,根据需要重写其中的方法,并在WebView中进行配置,示例代码如下: webView = (WebView) findViewById(R.id.webview); webView.setWebViewClient(n

  • Android中WebChromeClient和WebViewClient的区别浅析

    1.WebViewClient就是帮助WebView处理各种通知.请求事件的,具体来说包括:onLoadResource .onPageStart .onPageFinish .onReceiveError .onReceivedHttpAuthRequest 2.WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 onCloseWindow(关闭WebView) .onCreateWindow() .onJsAlert (W

  • WebView设置WebViewClient的方法

    WebView设置WebViewClient的方法 shouldOverrideUrlLoading: 在web页面里单击链接的时候,会自动调用android自带的浏览器来打开链接,需要通过该方法在本页面打开; @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } onLoadResource:加载资源时响应 onPageSta

  • 解决Android webview设置cookie和cookie丢失的问题

    Android页面嵌套了一个h5,H5页面内部有用户登陆页面,发现h5页面的登陆功能无法使用,一直登陆失败.和web那边商量一会,发现js写入的cookie丢失了.所有需要Android这边在重写写入一次. mWebView = view.findViewById(R.id.mall_view); settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setLoadsImagesAutom

  • Android webview实现拍照的方法

    Android webview实现拍照的方法 1. html <div id="pnlVideo1"> <input type="hidden" name="imgNric1" id="imgNric1" /> <label id="nric" class="control-label labelfont" style="color:#888;fo

  • Android 解决WebView多进程崩溃的方法

    问题 在android 9.0系统上如果多个进程使用WebView需要使用官方提供的api在子进程中给webview的数据文件夹设置后缀: WebView.setDataDirectorySuffix(suffix); 否则将会报出以下错误: Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377 1 com.a

  • 关于Android Webview 设置Cookie问题详解

    最近遇到一个比较坑爹的问题就是webview里添加第三方H5页面,但是数据获取不到,经过一天的折磨发现cookie值每次都会变,再根据谷歌开发者模式定位,cookie每次应该都是固定,每次变化说明本地的cookie有问题,或者为空. webview有一个CookieManager这个类,他是专门管理cookie的,这个类可以设置一个或多个cookie,而且当你在里面设置好cookie以后接口会自动根据你设置时的url来使用. 一共有两种获取cookie的方法一种是HttpURLConnectio

  • Android webview加载H5方法详细介绍

    目录 1,安卓APP 怎么用webview加载H5 2,H5怎么调用安卓定义的方法 3,安卓怎么调用H5定义的方法 这篇文章主要阐述3个知识点 安卓APP 怎么用webview加载H5 H5怎么调用安卓定义的方法 安卓怎么调用H5定义的方法 1,安卓APP 怎么用webview加载H5 安卓端定义个webview xml 页面,代码如下所示: <?xml version="1.0" encoding="utf-8"?> <WebView xmlns

  • Angularjs 设置全局变量的方法总结

    AngularJS 设置全局变量的三种方法 angularjs自身有二种,设置全局变量的方法,在加上js的设置全局变量的方法,总共有三种.要实现的功能是,在ng-app中定义的全局变量,在不同的ng-controller里都可以使用. 1,通过var 直接定义global variable,这根纯js是一样的. 2,用angularjs value来设置全局变量 . 3,用angularjs constant来设置全局变量 . 下面用一个例子,来说明,上面3种方法: 实例: 1,在app模块中,

  • iOS开发中WebView的基本使用方法简介

    1.使用UIWebView加载网页 运行XCode 4.3,新建一个Single View Application,命名为WebViewDemo. 2.加载WebView 在ViewController.h添加WebView成员变量和在ViewController.m添加实现 复制代码 代码如下: #import <UIKit/UIKit.h> @interface ViewController : UIViewController {     UIWebView *webView; } @e

  • JSP Session超时设置的实现方法

    JSP Session超时设置的实现方法 在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此Session销毁,客户端再一次与服务器交互时之前的Session就不存在了. 设置Session超时时间方式: 方式一:  在web.xml中设置session-config如下: <session-config> <

  • VirtualBox 共享文件夹权限设置及使用方法

    VirtualBox 共享文件夹权限设置及使用方法 环境: 主机(host):windowsXP 虚拟机:VirtualBox 客户机 (guest):slackware/ubuntu/... 看过我上一篇写的为VirtualBox 安装additions的朋友应该很清楚,设置VirtualBox共享文件夹之前需要安装VirtualBox Guest Additions.如果没有安装,请参考我的上一篇文章. 共享文件夹就是使主机的wendows和客户机linux能彼此共享文件.在当前的架构情况下

随机推荐