本文转自:http://hi.baidu.com/relayon/blog/item/92b15463677d3e6b0d33fa79.html

在移动互联网的争夺日趋白热化,各个互联网巨头纷纷推出自己的手机浏览器,浏览器市场的争夺从桌面转移到了手机。

在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。

什么是webkit

WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。

传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS。不过,随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分(例如Google Chrome和Maxthon 3采用V8引擎,却仍然宣称自己是WebKit内核)。

这里我们初步体验一下在android是使用webview浏览网页,在SDK的Dev Guide中有一个WebView的简单例子 。

在开发过程中应该注意几点:
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true); 
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象。[code]mWebView.setWebViewClient(new WebViewClient(){ 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
view.loadUrl(url); 
return true; 

});[/code]4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。[code]public boolean onKeyDown(int keyCode, KeyEvent event) { 
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
mWebView.goBack(); 
return true; 

return super.onKeyDown(keyCode, event); 
}  [/code]下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以为所欲为了。

看一个实例:[code]public class WebViewDemo extends Activity { 
private WebView mWebView; 
private Handler mHandler = new Handler();

public void onCreate(Bundle icicle) { 
super.onCreate(icicle); 
setContentView(R.layout.webviewdemo); 
mWebView = (WebView) findViewById(R.id.webview); 
WebSettings webSettings = mWebView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 
mWebView.addJavascriptInterface(new Object() { 
public void clickOnAndroid() { 
mHandler.post(new Runnable() { 
public void run() { 
mWebView.loadUrl("javascript:wave()"); 

}); 

}, "demo"); 
mWebView.loadUrl("file:///android_asset/demo.html"); 

}  [/code]我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。[code]<html> 
<script language="javascript"> 
function wave() { 
document.getElementById("droid").src="android_waving.png"; 

</script> 
<body> 
<a onClick="window.demo.clickOnAndroid()"> 
<img id="droid" src="android_normal.png"/><br> 
Click me! 
</a> 
</body> 
</html> 
[/code]这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。

这里还有几个知识点:

1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的assets目录中找内容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用Handler的目的。

[转]android webview学习相关推荐

  1. Android WebView简要介绍和学习计划

    我们通常会在App的UI中嵌入WebView,用来实现某些功能的动态更新.在4.4版本之前,Android WebView基于WebKit实现.不过,在4.4版本之后,Android WebView就 ...

  2. Carson带你学Android:这是一份全面详细的WebView学习攻略

    前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 那么这种该如何实现呢?其实这是Android里一个叫WebView组件实现 今天, ...

  3. Android Chromium WebView学习

    参考文章: 整体描述 Android Chromium WebView学习启动篇 Chromium Chromium和WebKit的智能指针实现原理分析 Chromium多线程通信的Closure机制 ...

  4. Android开发学习笔记:WebView 一

    WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法: 第一种方法的步骤: 1.在要Activity中实例 ...

  5. 转 Android开发学习笔记:浅谈WebView

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...

  6. Android FrameWork学习(二)Android系统源码调试

    点击打开链接 通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android ...

  7. android webview 多文件上传,Android中的webview支持页面中的文件上传实例代码

    Android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有,在android webview中访问时也会出现浏览文件的按钮 但是点击按钮之后没有反应... 那么如何能够 ...

  8. Android WebView和JavaScript交互

    JavaScript在现在的网页设计中用得很多,Android 的WebView可以载入网页,WebView也设计了与JavaScript通信的桥梁.这篇主要介绍一下WebViewk控件如何和Java ...

  9. Android 开发学习笔记:七大知识点板块汇总

    前言 我从事 Android 开发行业也有些年头,工作期间也接触过很多 Android 开发者, 因此也非常清楚 程序员最大的限制并非年龄而是实力: 但大多数初中级Android工程师,想要提升技能, ...

最新文章

  1. 目标跟踪之camshift---opencv中meanshift和camshift例子的应用
  2. html页面内容改变,但是网页内容不变
  3. Python3引号创建字符串
  4. OpenCv:椭圆上点的计算方程
  5. linux下用core和gdb查询出现段错误的地方
  6. 一个想法:成立草根技术联盟对开发人员进行技术定级解决企业员工招聘难问题!...
  7. 几分钟,就看到人性的几个面孔
  8. Photoshop-RGB色彩模式
  9. 计算机对操作系统函数的调用失败,解决win7提示“远程过程调用失败且未执行”的方案...
  10. BugKu 你必须让他停下来
  11. 狂神JUC笔记(上)
  12. 基于 B/S 架构自助点餐系统的设计与实现
  13. [译]不再对 MVVM 感到绝望
  14. Ubuntu SSE指令集 编程实例---复数乘法与共轭乘法
  15. import 下划线作用
  16. 华为硬件工程师手册_华为,英飞凌,中兴硬件工程师面试题
  17. 解决 Office 2007/2010/2013 安装错误:1402
  18. matlab中buttord用法_matlab butter函数
  19. 阿里P6架构师的成长之路,我只用了5个月.....
  20. 2019武汉理工计算机考研复试题(回忆)

热门文章

  1. python time localtimeq获取准确时间_python的内置模块time和datetime的方法详解以及使用(python内的time和datetime时间格式)...
  2. python给图片加半透明水印_Python 批量加水印就这么简单!
  3. 河北大学计算机复试题,2016年河北大学综合卷计算机科学与技术学院之数据库系统概论复试笔试最后押题五套卷...
  4. php文件的作用,php入口文件的作用-PHP问题
  5. mysql设置查询结果最大值_查找MySQL查询结果字段的最大值
  6. c语言case key pres,C#程序设计B-中国大学mooc-题库零氪
  7. 10万码农五年的C语言笔记!你现在知道别人为什么这么优秀了吗?
  8. python包mdure_Python hashlib模块实例使用详解
  9. php 零宽断言,正则表达式之零宽断言实例详解【基于PHP】
  10. linux下c语言读取roed文件,如何在Linux系统上安装Android4.4.docx