如何学习Android5.0 下 新的 webview 的实现

Android WebView 开发详解(二)
转载请注明出处
blog csdn net typename article details
powered by meichal zhao
Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,
转载请注明出处
http://blog.csdn.net/typename/article/details/ powered by meichal zhao
Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情。比如说客户端需要显示网页加载的进度、网页加载发生错误等等事件。 WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient开发者可以继承这两个类,接手相应事件处理。WebViewClient 主要提供网页加载各个阶段的通知,比如网页开始加载onPageStarted,网页结束加载onPageFinished等;WebChromeClient主要提供网页加载过程中提供的数据内容,比如返回网页的title,favicon等。1.WebViewClient的基本使用 创建WebViewClient实例并设置到WebView对象中,具体代码参考如下:class MyAndroidWebViewClient extends WebViewClient {
public void onPageStarted(WebView view, String url, Bitmap favicon) {
public void onPageFinished(WebView view, String url) {
webview.setWebViewClient(new MyAndroidWebViewClient ());2.WebViewClient API详解1)网页加载时机部分
public boolean shouldOverrideUrlLoading(WebView view, String url)当加载的网页需要重定向的时候就会回调这个函数告知我们应用程序是否需要接管控制网页加载,如果应用程序接管,并且return true意味着主程序接管网页加载,如果返回false让webview自己处理。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url
即将要被加载的url@return
true 当前应用程序要自己处理这个url, 返回false则不处理。Tips(1) 当请求的方式是"POST"方式时这个回调是不会通知的。(2) 当我们访问的地址需要我们应用程序自己处理的时候,可以在这里截获,比如我们发现跳转到的是一个market的链接,那么我们可以直接跳转到应用市场,或者其他app。public void onPageStarted(WebView view, String url, Bitmap favicon)当内核开始加载访问的url时,会通知应用程序,对每个main frame这个函数只会被调用一次,页面包含iframe 或者framesets 不会另外调用一次onPageStarted,当网页内内嵌的frame 发生改变时也不会调用onPageStarted。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url
即将要被加载的url@param favicon 如果这个favicon已经存储在本地数据库中,则会返回这个网页的favicon,否则返回为null。Tips:(1) iframe 可能不少人不知道什么含义,这里我解释下,iframe 我们加载的一张,下面有很多链接,我们随便点击一个链接是即当前host的一个iframe.(2) 有个问题可能是开发者困惑的,onPageStarted和shouldOverrideUrlLoading 在网页加载过程中这两个函数到底哪个先被调用。
当我们通过loadUrl的方式重新加载一个网址时候,这时候会先调用onPageStarted再调用shouldOverrideUrlLoading,当我们在打开的这个网址点击一个link,这时候会先调用shouldOverrideUrlLoading 再调用onPageStarted。不过shouldOverrideUrlLoading不一定每次都被调用,只有需要的时候才会被调用。public void onPageFinished(WebView view, String url)当内核加载完当前页面时会通知我们的应用程序,这个函数只有在main frame情况下才会被调用,当调用这个函数之后,渲染的图片不会被更新,如果需要获得新图片的通知可以使用@link WebView.PictureListener#onNewPicture。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url
即将要被加载的urlpublic void onLoadResource(WebView view, String url)通知应用程序WebView即将加载url 制定的资源参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url
即将加载的url 资源public WebResourceResponse shouldInterceptRequest(WebView view,
String url)通知应用程序内核即将加载url制定的资源,应用程序可以返回本地的资源提供给内核,若本地处理返回数据,内核不从网络上获取数据。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url
raw url 制定的资源@return 返回WebResourceResponse包含数据对象,或者返回nullTips这个回调并不一定在UI线程执行,所以我们需要注意在这里操作View或者私有数据相关的动作。如果我们需要改变网页的背景,或者需要实现网页页面颜色定制化的需求,可以在这个回调时机处理。public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl)当浏览器访问制定的网址发生错误时会通知我们应用程序,比如网络错误。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param errorCode 错误号可以在WebViewClient.ERROR_* 里面找到对应的错误名称。@param description 描述错误的信息@param failingUrl
当前访问失败的url,注意并不一定是我们主urlTips在onReceiveError我们可以自定义网页的错误页面。public void onFormResubmission(WebView view, Message dontResend,
Message resend)如果浏览器需要重新发送POST请求,可以通过这个时机来处理。默认是不重新发送数据。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param dontResent 当浏览器不需要重新发送数据时,可以使用这个参数。@param resent 当浏览器需要重新发送数据时, 可以使用这个参数。public void doUpdateVisitedHistory(WebView view, String url,
boolean isReload)通知应用程序可以将当前的url存储在数据库中,意味着当前的访问url已经生效并被记录在内核当中。这个函数在网页加载过程中只会被调用一次。注意网页前进后退并不会回调这个函数。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url 当前正在访问的url @ param isReload 如果是true 这个是正在被reload的urlpublic void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error)当网页加载资源过程中发现SSL错误会调用此方法。我们应用程序必须做出响应,是取消请求handler.cancel(),还是继续请求handler.proceed();内核的默认行为是handler.cancel();参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param handler 处理用户请求的对象。@param error
SSL错误对象Tips内核会记住本次选择,如果下次还有相同的错误,内核会直接执行之前选择的结果。public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm)通知应用程序WebView接收到了一个Http auth的请求,应用程序可以使用supplied 设置webview的响应请求。默认行为是cancel 本次请求。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param handler 用来响应WebView请求的对象@param host
请求认证的host@param realm 认真请求所在的域public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) 提供应用程序同步一个处理按键事件的机会,菜单快捷键需要被过滤掉。如果返回true,webview不处理该事件,如果返回false, webview会一直处理这个事件,因此在view 链上没有一个父类可以响应到这个事件。默认行为是return false;参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param
event 键盘事件名@return
如果返回true,应用程序处理该时间,返回false 交有webview处理。public void onScaleChanged(WebView view, float oldScale, float newScale)通知应用程序webview 要被scale。应用程序可以处理改事件,比如调整适配屏幕。public void onReceivedLoginRequest(WebView view, String realm,
String account, String args)通知应用程序有个自动登录的帐号过程参数说明:@param view 请求登陆的webview@param realm 账户的域名,用来查找账户。@param account 一个可选的账户,如果是null 需要和本地的账户进行check, 如果是一个可用的账户,则提供登录。@param
验证制定参数的登录用户3.WebChromeClient 基本使用4. WebChromeClient API详解创建WebChromeClient实例并设置到WebView对象中,具体代码参考如下:public void onProgressChanged(WebView view, int newProgress)通知应用程序当前网页加载的进度。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。public void onReceivedTitle(WebView view, String title)当document 的title变化时,会通知应用程序参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param title
document新的titleTips这个函数调用时机不确定,有可能很早,有可能很晚,取决于网页把title设置在什么位置,大多数网页一般把title设置到页面的前面,因此很多情况会比较早回调到这个函数。public void onReceivedIcon(WebView view, Bitmap icon)当前页面有个新的favicon时候,会回调这个函数。参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param icon 当前页面的faviconpublic void onReceivedTouchIconUrl(WebView view, String url,
boolean precomposed)通知应用程序 apple-touch-icon的 url 参数说明:@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url
apple-touch-icon 的服务端地址@param precomposed
如果precomposed 是true 则touch-icon是预先创建的Tips 如果应用程序需要这个icon的话, 可以通过这个url获取得到 icon。public void onShowCustomView(View view, CustomViewCallback callback)通知应用程序webview需要显示一个custom view,主要是用在视频全屏HTML5Video support。参数说明:@param view 即将要显示的view@param callback
当view 需要dismiss 则使用这个对象进行回调通知。public void onHideCustomView()退出视频通知public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg)请求创建一个新的窗口,如果我们应用程序接管这个请求,必须返回true,并且创建一个新的webview来承载主窗口。如果应用程序不处理,则需要返回false,默认行为和返回false表现一样。参数说明:@param view 请求创建新窗口的webview@param isUserGesture 如果是true,则说明是来自用户收拾操作行为,比如用户点击链接@param isDialog true 请求创建的新窗口必须是个dialog,而不是全屏的窗口。@param resultMsg 当webview创建时需要发送一个消息。WebView.WebViewTransport.setWebView(WebView)Tips 具体例子如下:
private void createWindow(final Message msg) {
WebView.WebViewTransport transport = (WebView.WebViewTransport) msg.
final Tab newTab = mWebViewController.openTab(null, Tab.this, 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 view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。@param url 当前请求弹出javascript 对话框webview 加载的url地址。@param message 弹出的内容信息@result 用来响应用户的处理。Tips如果我们应用接管处理, 则必须给出result的结果,result.firm必须调用其中之后,否则内核会hang住。public boolean onJsConfirm(WebView view, String url, String message,
JsResult result)通知应用程序提供confirm 对话框。参数说明同上onJsAlertpublic boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result)通知应用程序显示一个prompt对话框。 Tips必须调用result.confirm 方法如果应用程序接管这个方法。public boolean onJsBeforeUnload(WebView view, String url, String message,
JsResult result)通知应用程序显示一个对话框,让用户选择是否离开当前页面,这个回调是javascript中的onbeforeunload事件,如果客户端返回true,内核会认为客户端提供对话框。默认行为是return false。参数说明和之前介绍的onJsAlert()相同。public void onExceededDatabaseQuota(String url, String databaseIdentifier,
long quota, long estimatedDatabaseSize, long totalQuota,
WebStorage.QuotaUpdater quotaUpdater)通知应用程序webview内核web sql 数据库超出配额,请求是否扩大数据库磁盘配额。默认行为是不会增加数据库配额。参数说明:@param url 触发这个数据库配额的url地址@param databaseIdentifier
指示出现数据库超过配额的标识。@param quota
原始数据库配额的大小,是字节单位bytes@param estimatedDatabaseSize
到达底线的数据大小 bytes@param totalQuota 总的数据库配额大小 bytes@param quotaUpdater 更新数据库配额的对象,可以使用 quotaUpdater.updateQuota(newQuota);配置新的数据库配额大小。public void onReachedMaxAppCacheSize(long requiredStorage, long quota,
WebStorage.QuotaUpdater quotaUpdater) 通知应用程序内核已经到达最大的appcache。appcache是HTML5针对offline的一个数据处理标准。public void onGeolocationPermissionsShowPrompt(String origin,
GeolocationPermissions.Callback callback)当前页面请求是否允许进行定位。GeolocationPermissions.Callback的使用public void invoke(String origin, boolean allow, boolean retain);参数说明:@param origin 权限设置的源地址@param allow 是否允许定位@retain 当前的选择是否让内核记住。public void onGeolocationPermissionsHidePrompt()public void openFileChooser(ValueCallback uploadFile, String acceptType, String capture)这个回调是私有回调, 当页面需要请求打开系统的文件选择器,则会回调这个方法,比如我们需要上传图片,请求拍照,邮件的附件上传等等操作。如果不实现这个私有API,则上面的请求都将不会执行。有问题欢迎讨论。问题:android webview 如何把数据显示在网页上?
比如有一个网页中index.html,有这样一段代码
&&&&&input type="tel" name="tel" placeholder="请输入手机号码" maxlength="11" value=""/&
webview加载这index.html的时候,我希望把手机号码直接初始化显示在这个地方
那客户端应该怎么做?
当然了,还有一个简单的办法,就是和网页程序员沟通,直接在uri后面加个手机号码的参数,比如
/html5/toForgotpwd?tel=,然后有网页程序员在网页端通过js来初始化,但是,如果,我不想网页程序员任何干预的话,android客户端能不能直接实现这个功能?
解决方案1:你在客户端能获取到这个手机号码的话就可以,网上搜搜webview与android交互。需要你本地执行一段js代码
以上介绍了“android webview 如何把数据显示在网页上?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/1264313.html
上一篇: 下一篇:谷歌发布全新 WebView 组件的测试版 - 开源中国社区
当前访客身份:游客 [
当前位置:
谷歌发布全新 WebView 组件的测试版
多数 Android 的应用一般使用 WebView 组件来显示 HTML 网页内容。在 Android 5.0 Lollipop 中,Google 为这个平台独立更新了 WebView 组件。从现在开始,开发者可以通过 Beta 通道来测试最新版的 WebView 组件并提供反馈。WebView 的更新包括很多 bug 修复,新的 Web 平台 API,这些更新基本来自于 Chromium 。成为 Beta 通道的测试人员可以让你尽快体验这些新的 API。Beta 通道提供的首个版本基于 Chrome 40,你可以通过这里了解到完整的。想要加入 Beta 通道成为一个测试人员,可以注册加入这个 ,然后就可以通过 Play Store 安装 Beta 版的 WebView。Bug 的报告请提交到 .via
Android 的详细介绍:
Android 的下载地址:
想通过手机客户端(支持 Android、iPhone 和 Windows Phone)访问开源中国:
旧一篇: 2年前
新一篇: 2年前
相关讨论话题
你也许会喜欢
这货能否让html5 应用更加流畅?
这货能否让html5 应用更加流畅?
微信6.1关闭了webview debug接口,这叫开放
引用来自“吾爱”的评论微信6.1关闭了webview debug接口,这叫开放微信用的是腾讯浏览器内核吧
5楼:OSC首席键客
引用来自“吾爱”的评论微信6.1关闭了webview debug接口,这叫开放引用来自“muyu”的评论微信用的是腾讯浏览器内核吧我想说微信的网页怎么调试?我没办法啊!
6楼:jwenlee
引用来自“吾爱”的评论微信6.1关闭了webview debug接口,这叫开放引用来自“muyu”的评论微信用的是腾讯浏览器内核吧引用来自“OSC首席键客”的评论我想说微信的网页怎么调试?我没办法啊!大家都怎么调试的?
7楼:大仁哥--你好啊
引用来自“吾爱”的评论微信6.1关闭了webview debug接口,这叫开放引用来自“muyu”的评论微信用的是腾讯浏览器内核吧引用来自“OSC首席键客”的评论我想说微信的网页怎么调试?我没办法啊!引用来自“jwenlee”的评论大家都怎么调试的?红包大战后已经放弃微信
引用来自“吾爱”的评论微信6.1关闭了webview debug接口,这叫开放引用来自“muyu”的评论微信用的是腾讯浏览器内核吧引用来自“OSC首席键客”的评论我想说微信的网页怎么调试?我没办法啊!引用来自“jwenlee”的评论大家都怎么调试的?6.1之前可以通过chrome的 chrome://inspect/#devices 进行远程调试,6.1开始关闭了这个通道,现在调试非常麻烦,可能需要在网页中内嵌一个js的控制台,比如debuggap.js
9楼:jwenlee
引用来自“吾爱”的评论微信6.1关闭了webview debug接口,这叫开放引用来自“muyu”的评论微信用的是腾讯浏览器内核吧引用来自“OSC首席键客”的评论我想说微信的网页怎么调试?我没办法啊!引用来自“jwenlee”的评论大家都怎么调试的?引用来自“吾爱”的评论6.1之前可以通过chrome的 chrome://inspect/#devices 进行远程调试,6.1开始关闭了这个通道,现在调试非常麻烦,可能需要在网页中内嵌一个js的控制台,比如debuggap.js之前也试过chrome://inspect/#devices 一直显示不出来,现去debuggap.js试下
与内容无关的评论将被删除,严重者禁用帐号
本周热点资讯
本站最新资讯Android Studio开发学习教程之加载网页的方法技巧
时间:日来源:百度
1、首先我们打开下载安装好的然后新建一个项目,这里为了方便我就在我的Demo里面新建一个Activity了
2、然后我们在界面布局代码里面增加一个Webview控件
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools& android:layout_width=&match_parent&
android:layout_height=&match_parent& android:paddingLeft=&@dimen/activity_horizontal_margin&
android:paddingRight=&@dimen/activity_horizontal_margin&
android:paddingTop=&@dimen/activity_vertical_margin&
android:paddingBottom=&@dimen/activity_vertical_margin&
tools:context=&com.basillee.asus.demo.MainActivity6&&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:id=&@+id/webView&&&/WebView&
&/RelativeLayout&
3、然后我们在Oncreate里面获取控件然后load百度的网址
public class MainActivity6 extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity6);
WebView webView= (WebView) findViewById(R.id.webView);
webView.loadUrl(&&);
4、这里我们要访问网络记得增加权限
&uses-permission android:name=&android.permission.INTERNET&&&/uses-permission&
5、然后我们运行我们的虚拟机,点击Android Studio的运行按钮
6、然后我们可以看到此虚拟机加载了百度网址
Android Studio是一项全新的基于IntelliJ IDEA的Android开发环境,类似于Eclipse ADT插件,Android Studio提供了集成的Android开…
页面地址:/xiazai/66567.html
看过这篇文章的人还看过<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信