WebView之WebViewClient

对于加载URL的总结就是:
1、如果是在线网址记得添加网络访问权限
2、在线网址中,如果要使用webview打开,记得设置WebViewClient
3、打开本地html文件时,是不需要设置WebViewClient,对应的asstes目录的url为:file:///android_asset/xxxxx

// 拦截页面加载,返回true表示宿主app拦截并处理了该url,否则返回false由当前WebView处理
// 此方法在API24被废弃,不处理POST请求

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    return false;
}

// 拦截页面加载,返回true表示宿主app拦截并处理了该url,否则返回false由当前WebView处理
// 此方法添加于API24,不处理POST请求,可拦截处理子frame的非http请求

@TargetApi(Build.VERSION_CODES.N)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    return shouldOverrideUrlLoading(view, request.getUrl().toString());
}

// 此方法废弃于API21,调用于非UI线程
// 拦截资源请求并返回响应数据,返回null时WebView将继续加载资源

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    return null;
}

// 此方法添加于API21,调用于非UI线程
// 拦截资源请求并返回数据,返回null时WebView将继续加载资源

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    return shouldInterceptRequest(view, request.getUrl().toString());
}

// 页面(url)开始加载

public void onPageStarted(WebView view, String url, Bitmap favicon) {
}

// 页面(url)完成加载

public void onPageFinished(WebView view, String url) {
}

// 将要加载资源(url)

public void onLoadResource(WebView view, String url) {
}

// 这个回调添加于API23,仅用于主框架的导航
// 通知应用导航到之前页面时,其遗留的WebView内容将不再被绘制。
// 这个回调可以用来决定哪些WebView可见内容能被安全地回收,以确保不显示陈旧的内容
// 它最早被调用,以此保证WebView.onDraw不会绘制任何之前页面的内容,随后绘制背景色或需要加载的新内容。
// 当HTTP响应body已经开始加载并体现在DOM上将在随后的绘制中可见时,这个方法会被调用。
// 这个回调发生在文档加载的早期,因此它的资源(css,和图像)可能不可用。
// 如果需要更细粒度的视图更新,查看 postVisualStateCallback(long, WebView.VisualStateCallback).
// 请注意这上边的所有条件也支持 postVisualStateCallback(long ,WebView.VisualStateCallback)

public void onPageCommitVisible(WebView view, String url) {
}

// 此方法废弃于API23
// 主框架加载资源时出错

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
}

// 此方法添加于API23
// 加载资源时出错,通常意味着连接不到服务器
// 由于所有资源加载错误都会调用此方法,所以此方法应尽量逻辑简单

@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());
    }
}

// 此方法添加于API23
// 在加载资源(iframe,image,js,css,ajax...)时收到了 HTTP 错误(状态码>=400)

public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
}

// 是否重新提交表单,默认不重发

public void onFormResubmission(WebView view, Message dontResend, Message resend) {
    dontResend.sendToTarget();
}

// 通知应用可以将当前的url存储在数据库中,意味着当前的访问url已经生效并被记录在内核当中。
// 此方法在网页加载过程中只会被调用一次,网页前进后退并不会回调这个函数。

public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
}

// 加载资源时发生了一个SSL错误,应用必需响应(继续请求或取消请求)
// 处理决策可能被缓存用于后续的请求,默认行为是取消请求

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.cancel();
}

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

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) {
    request.cancel();
}

// 处理HTTP认证请求,默认行为是取消请求

public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
    handler.cancel();
}

// 通知应用有个已授权账号自动登陆了

public void onReceivedLoginRequest(WebView view, String realm, String account, String args) {
}

// 给应用一个机会处理按键事件
// 如果返回true,WebView不处理该事件,否则WebView会一直处理,默认返回false

public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
    return false;
}

// 处理未被WebView消费的按键事件
// WebView总是消费按键事件,除非是系统按键或shouldOverrideKeyEvent返回true
// 此方法在按键事件分派时被异步调用

public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
    super.onUnhandledKeyEvent(view, event);
}

// 通知应用页面缩放系数变化

public void onScaleChanged(WebView view, float oldScale, float newScale) {
}

一些不太常用的方法

 * 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次
 */
public void onLoadResource(WebView view, String url) 
 /**
 *  (WebView发生改变时调用) 
 *  可以参考http://www.it1352.com/191180.html的用法
 */
 public void onScaleChanged(WebView view, float oldScale, float newScale)
 /**
 * 重写此方法才能够处理在浏览器中的按键事件。
 * 是否让主程序同步处理Key Event事件,如过滤菜单快捷键的Key Event事件。
 * 如果返回true,WebView不会处理Key Event,
 * 如果返回false,Key Event总是由WebView处理。默认:false
 */
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event)
 /**
 * 是否重发POST请求数据,默认不重发。
 */
onFormResubmission(WebView view, Message dontResend, Message resend)
 /**
 * 更新访问历史
 */
doUpdateVisitedHistory(WebView view, String url, boolean isReload)
 /**
 * 通知主程序输入事件不是由WebView调用。是否让主程序处理WebView未处理的Input Event。
 * 除了系统按键,WebView总是消耗掉输入事件或shouldOverrideKeyEvent返回true。
 * 该方法由event 分发异步调用。注意:如果事件为MotionEvent,则事件的生命周期只存在方法调用过程中,
 * 如果WebViewClient想要使用这个Event,则需要复制Event对象。
 */
onUnhandledInputEvent(WebView view, InputEvent event)
 /**
 * 通知主程序执行了自动登录请求。
 */
onReceivedLoginRequest(WebView view, String realm, String account, String args)
/**
 * 通知主程序:WebView接收HTTP认证请求,主程序可以使用HttpAuthHandler为请求设置WebView响应。默认取消请求。
 */
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)
/**
 * 通知主程序处理SSL客户端认证请求。如果需要提供密钥,主程序负责显示UI界面。
 * 有三个响应方法:proceed(), cancel() 和 ignore()。
 * 如果调用proceed()和cancel(),webview将会记住response,
 * 对相同的host和port地址不再调用onReceivedClientCertRequest方法。
 * 如果调用ignore()方法,webview则不会记住response。该方法在UI线程中执行,
 * 在回调期间,连接被挂起。默认cancel(),即无客户端认证
 */
onReceivedClientCertRequest(WebView view, ClientCertRequest request)

你可能感兴趣的:(WebView之WebViewClient)