Android WebView 开发具体解释
Posted wgwyanfs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android WebView 开发具体解释相关的知识,希望对你有一定的参考价值。
转载请注明出处 http://blog.csdn.net/typename/article/details/39495409 powered by miechal zhao
概览:
android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页载入过程中做应用程序想处理的事情。比方说client须要显示网页载入的进度、网页载入错误发生等等事件。
WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient开发人员能够继承这两个类,接手相应事件处理。
WebViewClient 主要提供网页载入各个阶段的通知,比方网页開始载入onPageStarted。网页结束载入onPageFinished等;WebChromeClient主要提供网页载入过程中提供的数据内容,比方返回网页的title,favicon等。
1.WebViewClient的基本使用
class MyAndroidWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // TODO } @Override public void onPageFinished(WebView view, String url) { // TODO }
} webview.setWebViewClient(new MyAndroidWebViewClient ());
2.WebViewClient API详细解释
public boolean shouldOverrideUrlLoading(WebView view, String url)当载入的网页须要重定向的时候就会回调这个函数告知我们应用程序是否须要接管控制网页载入。假设应用程序接管,而且return true意味着主程序接管网页载入,假设返回false让webview自己处理。
public void onPageStarted(WebView view, String url, Bitmap favicon)当内核開始载入訪问的url时,会通知应用程序,对每一个main frame这个函数仅仅会被调用一次。页面包括iframe 或者framesets 不会另外调用一次onPageStarted,当网页内内嵌的frame 发生改变时也不会调用onPageStarted。
只是shouldOverrideUrlLoading不一定每次都被调用。仅仅有须要的时候才会被调用。
public void onPageFinished(WebView view, String url)
当内核载入完当前页面时会通知我们的应用程序。这个函数仅仅有在main frame情况下才会被调用,当调用这个函数之后,渲染的图片不会被更新。假设须要获得新图片的通知能够使用@link WebView.PictureListener#onNewPicture。
public void onLoadResource(WebView view, String url)通知应用程序WebView即将载入url 制定的资源
public WebResourceResponse shouldInterceptRequest(WebView view, String url)通知应用程序内核即将载入url制定的资源,应用程序能够返回本地的资源提供给内核。若本地处理返回数据,内核不从网络上获取数据。
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)当浏览器訪问制定的网址错误发生时会通知我们应用程序。比方网络错误。
public void onFormResubmission(WebView view, Message dontResend, Message resend)假设浏览器须要又一次发送POST请求,能够通过这个时机来处理。默认是不又一次发送数据。
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload)
通知应用程序能够将当前的url存储在数据库中,意味着当前的訪问url已经生效并被记录在内核其中。
这个函数在网页载入过程中仅仅会被调用一次。注意网页前进后退并不会回调这个函数。
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
当网页载入资源过程中发现SSL错误会调用此方法。我们应用程序必须做出响应,是取消请求handler.cancel(),还是继续请求handler.proceed();内核的默认行为是handler.cancel();
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)
通知应用程序WebView接收到了一个Http auth的请求,应用程序能够使用supplied 设置webview的响应请求。
默认行为是cancel 本次请求。
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event)提供应用程序同步一个处理按键事件的机会,菜单快捷键须要被过滤掉。
假设返回true,webview不处理该事件,假设返回false, webview会一直处理这个事件,因此在view 链上没有一个父类能够响应到这个事件。默认行为是return false;
public void onScaleChanged(WebView view, float oldScale, float newScale)通知应用程序webview 要被scale。应用程序能够处理改事件。比方调整适配屏幕。
public void onReceivedLoginRequest(WebView view, String realm, String account, String args)
通知应用程序有个自己主动登录的帐号过程
4. WebChromeClient API详细解释
public void onProgressChanged(WebView view, int newProgress)通知应用程序当前网页载入的进度。
public void onReceivedTitle(WebView view, String title)
当document 的title变化时,会通知应用程序
public void onReceivedIcon(WebView view, Bitmap icon)
当前页面有个新的favicon时候,会回调这个函数。
public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed)
public void onShowCustomView(View view, CustomViewCallback callback)
通知应用程序webview须要显示一个custom view,主要是用在视频全屏html5Video support。
public void onHideCustomView()退出视频通知
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg)请求创建一个新的窗体。假设我们应用程序接管这个请求,必须返回true,而且创建一个新的webview来承载主窗体。
private void createWindow(final Message msg) { WebView.WebViewTransport transport = (WebView.WebViewTransport) msg.obj; final Tab newTab = mWebViewController.openTab(null, Tab.this, true, true); transport.setWebView(newTab.getWebView()); msg.sendToTarget(); }
public void onRequestFocus(WebView view)webview请求得到focus。发生这个主要是当前webview不是前台状态。是后台webview。
public void onCloseWindow(WebView window)
通知应用程序从关闭传递过来的webview并从view tree中remove。
public boolean onJsAlert(WebView view, String url, String message, JsResult result)
通知应用程序显示javascript alert对话框,假设应用程序返回true内核觉得应用程序处理这个消息,返回false,内核自己处理。
@param url 当前请求弹出javascript 对话框webview 载入的url地址。
public boolean onJsConfirm(WebView view, String url, String message, JsResult result)
通知应用程序提供confirm 对话框。
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
通知应用程序显示一个prompt对话框。
public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result)通知应用程序显示一个对话框,让用户选择是否离开当前页面,这个回调是javascript中的onbeforeunload事件。假设client返回true,内核会觉得client提供对话框。默认行为是return false。
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater)
通知应用程序webview内核web sql 数据库超出配额,请求是否扩大数据库磁盘配额。默认行为是不会添加数据库配额。
public void onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater)
通知应用程序内核已经到达最大的appcache。
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)
当前页面请求是否同意进行定位。
public void onGeolocationPermissionsHidePrompt()
public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture)这个回调是私有回调。 当页面须要请求打开系统的文件选择器,则会回调这种方法,比方我们须要上传图片。请求拍照。邮件的附件上传等等操作。
以上是关于Android WebView 开发具体解释的主要内容,如果未能解决你的问题,请参考以下文章
Android NestedScrolling解决滑动冲突问题 - 项目实战
Android NestedScrolling解决滑动冲突问题 - 项目实战
Android中WebView的JavaScript代码和本地代码交互的三种方式