沪江Android 开发教你如何理解WebView(上)

 

今天就为大家讲讲Android中WebView的详细使用方法。...

 听说点击 蓝色字 关注的人,最近de运气会好到爆表
作者:kymjs张涛


沪江教育 Android 开发工程师,《KJFrameForAndroid》开发框架作者。爱看书,爱敲码,善于交流,乐于分享。曾担任电影《天籁:一万年以后》新媒体产品运营。


作为Android开发者,我们都知道在手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装为一个叫做 WebView 组件。今天就为大家讲讲Android中WebView的详细使用方法

在开发过程中应该注意几点:

1.这是最基本的 AndroidManifest.xml 中必须添加访问网络权限。

2.如果访问的页面中有 Javascript,则 WebView 必须设置支持 Javascript。
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 WebView的WebViewClient对象.
4.如果不做任何处理 ,浏览网页,点击系统“Back”键,整个 Browser 会调用 finish()而结束自身,如果希望浏览的网页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该 Back 事件.(代码有些精简)
与js互调既然可以显示网页,那么当然也可以让网页操作本地方法。(由于一行写不下,缩进我调整了一下)
我们看 addJavascriptInterface(Object obj,String interfaceName)这个方法 ,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global.这样初始化 WebView 后,在WebView加载的页面中就可以直接通过javascript:window.demo访问到绑定的java对象了. 来看看在html中是怎样调用的.
这样在 javascript 中就可以调用 java 对象的 clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比如发短信,调用联系人列表等手机系统功能),这里 wave()方法是 java 中调用 javascript 的例子.

需要说明一点:addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler 的目的.

深入使用WebView

让js调用Android代码

1.简述 WebView、WebViewClient、WebChromeClient 之间的区别:

在 WebView 的设计中,不是什么事都要 WebView类干的,有些杂事是分给其他人的,这样 WebView 专心干好 自己的解析、渲染工作就行了.WebViewClient 就是帮助 WebView 处理各种通知、请求事件等 ,WebChromeClient 是辅助 WebView 处理 Javascript 的对话框,网站图标,网站 title.

2.功能实现:

利用 android 中的 WebView 加载一个 html 网页,在 html 网页中定义一个按钮,点击按钮弹出一 个 toast.

3.实现步骤:

首先定义一个接口类,将上下文对象传进去,在接口类中定义要在 js 中实现的方法。
接着在assets资源包下定义一个 html 文件,在文件中定义一个 button.button 的点击事件定义为一个 js 函数.

之后在 xml 中定义一个 WebView 组件,在活动类中获取 WebView 并对 WebView 参数进行设置,此处特别注意要设置 WebView 支持 js 且将定义的 js 接口类添加到 WebView 中去,此后在 js 中就可以利用该接口类中定义的 函数了.即:

myWebView.getSettings().setJavaScriptEnabled(true);

myWebView.addJavascriptInterface(new JavaScriptinterface(this),”android”);

最后利用 WebView 加载本地 html 文件的方法是:
此处的htmltext 是以字符串的方式读取 assets 报下 html中的内容.

4. 实现利用返回键返回到上一页:

设置 WebView 的按键监听,监听到期返回键并判断网页是否能够返回 ,利用 WebView 的 goBack()返回到上一页.

WebView 缓存

在项目中如果使用到 WebView 控件,当加载 html 页面时,会在/data/data/包名目录下生成 database 与 cache 两个文件夹(我的手机没有root,就不截图了)。

请求的 url 记录是保存在 WebViewCache.db,而 url 的内容是保存在 WebViewCache 文件夹下. 大家可以自己动手试一下,定义一个html文件,在里面显示一张图片,用WebView加载出来,然后再试着从缓存里把这张图片读取出来并显示 .

WebView 删除缓存

其实已经知道缓存保存的位置了,那么删除就很简单了,获取到这个缓存,然后删掉他就好了。

//删除保存于手机上的缓存
是否启用缓存功能也是可以控制的
在退出应用的时候加上如下代码,可以完整的清空缓存
WebView 处理 404 错误

显示网页还会遇到一个问题,就是网页有可能会找不到,WebView当然也是可以处理的(代码如果全部贴出来实在太多了,这里就只贴重要部分了)


未完

由于WebView的用法实在太多了,这里就分为两部分,在以后的推送消息中将继续跟大家讲讲WebView滚动状态监听以及获取session与写cookie的方法~~请继续关注

转载自作者博客

原文链接:http://kymjs.com/code/2015/05/03/01/


猜你喜欢以下文章

算完给跪了!一个月你要赚多少才能撑起一个家?
10年后的腾讯QQ……
在线教育老师收入为何超网红??
黑客是如何发现女朋友出轨的
『 麦子学院 』
我们聊的不止是技术,还有风月
麦子学院
www.maiziedu.com
发现最新鲜的资讯

每天推送IT教育干货


    关注 麦班长


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册