[转]android webview学习

本文转自: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的目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EntityFramework进阶——CodeFirst数据库迁移

与视觉操作界面相比&#xff0c;CodeFirst机制提供了一套命令行模式的迁移工具&#xff0c;协助开发人员有效的进行数据库与数据模型的同步维护操作。 新建一个控制台项目CFMigrationsDemo&#xff0c;选用来自数据库的EF设计器模式&#xff0c; 并向其中添加一个Product.cs类文…

java远程debug

常常会遇到在应用部署在weblogic,tomcat,jetty等服务器下&#xff0c;而我们的代码却在本地&#xff0c;如何用本地的代码调试远程服务器上的程序呢 在web服务器上添加jvm参数,如以下是我们启动jetty服务器的参数&#xff0c;8000代表的是远程debug的端口号 java -Xdebug -Xrun…

前端控件JQuery Datatables使用——常用功能初始化

本文用于自己记录&#xff0c;忘记时可以用来回顾。点击这里进入JQuerydatatable官网API地址 JQuery Datatables初始化 个人比较喜欢JQueryDatatables的Bootstrap4风格&#xff0c;所以文章以Bootstrap4风格为例。 JQueryDatatable的初始化很简单&#xff0c;按照官网的举例说…

ASP.NET中常用的26个优化性能方法(1-10)

1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证&#xff0c;比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户…

一款轻量级的消息提示插件 —— toastr

toastr是一款轻量级的消息提示插件&#xff0c;基于JQuery&#xff0c;使用简单方便&#xff0c;外观大气漂亮。 点击这里进入toastr在线调试使用 点击这里进入toastr官方网站 使用效果如下图所示&#xff1a; 插件使用需要引用的JS和CSS文件如下图所示&#xff1a; 各版…

《Spring Recipes》第二章笔记:Creating Beans by Invokin...

2019独角兽企业重金招聘Python工程师标准>>> 《Spring Recipes》第二章笔记&#xff1a;Creating Beans by Invoking an Instance Factory Method 问题 用户希望使用工厂类来实例化bean。 解决方案 Spring的bean元素中提供了factory-bean属性来配置工厂类&#xff0…

JQuery Datatables editor进行增删改查操作(一)

背景 editor作为Datatables的插件之一&#xff0c;功能十分强大&#xff0c;有全行编辑模式、泡泡编辑模式、行内编辑模式。个人觉得&#xff0c;除了泡泡编辑模式外&#xff0c;其他两种模式功能在实际项目中会经常使用到&#xff0c;泡泡模式提供了模态框可以对表格内的数据…

将C#中DateTime类型转化为JavaScript中的Date类型

将C#中的DateTime类型数据返回到前端页面时&#xff0c;显示的样子如下图所示&#xff1a; 可以用JS前端操作转化成JS的Date格式&#xff0c;直接上代码 &#xff1a; // 对Date的扩展&#xff0c;将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季…

如何在ashx页面获取Session值 (仅供个人参考)

在一般事务处理页面&#xff0c;可以轻松的得到 Request,Response对象&#xff0c;从而进行相应的操作&#xff0c;如下&#xff1a; HttpRequest Request context.Request; HttpResponse Response context.Response; 但是要得到 Session的值就没有那么简单了。比如你要在as…

FusionCharts V3图表导出图片和PDF属性说明

百闻不如一见&#xff0c;狠狠点击&#xff0c;快快下载&#xff1a;&#xff08;演示文档有错误&#xff0c;不提供下载了。待新的演示文档出来。&#xff09; 许多朋友说上面的DEMO用不了。fusioncharts官方的演示非常不错&#xff0c;就是来不及整理&#xff0c;各位大侠们…

JQuery Datatables editor进行增删改查操作(二)

背景 上一篇对editor进行了一个基本功能的初始化操作演示&#xff0c;本文进一步了解下editor在上一篇文章功能的基础上添加了部分常用基本功能。 整体界面如下图所示&#xff1a; 新增界面&#xff1a; 新增界面增加了单选按钮&#xff0c;下拉框&#xff0c;和时间选择器&am…

JQuery Datatables editor 本地编辑功能

背景 很多项目需求中&#xff0c;不需要表格自己进行AJax操作&#xff0c;数据的交互需要另外写代码实现&#xff0c;表格只需要提供本地编辑即可&#xff0c;这该怎么办呢&#xff1f;其实editor对这种实现很简单&#xff0c;去掉editor中的ajax属性即可。可以点击这里查看ed…

《统一沟通-微软-实战》-6-部署-2-中介服务器-5-语音路由-语音策略

创建语音策略和配置 PSTN 用法记录 如果要创建新的语音策略&#xff0c;请执行以下步骤。如果要编辑语音策略&#xff0c;请参阅修改语音策略和配置 PSTN 用法记录中的相关步骤。 注意&#xff1a; 每个语音策略必须至少具有一条关联的 PSTN 用法记录。要查看企业语音部署中提…

JQuery Datatables editor 行内编辑功能

背景 ERP软件中&#xff0c;能进行行内编辑的表单是常用功能&#xff0c;行内编辑功能能让用户在表格中自己填写、修改、删除数据或者选择数据&#xff0c;可以说表格控件是ERP软件的核心控件&#xff0c;而行内编辑功能是核心中的关键。 本文会继续接着上一篇文章的介绍继续…

JQuery Datatables 动态配置参数异步加载数据

背景需求 在前端动态设置datatables需要传递到后端的查询参数&#xff0c;异步加载返回的数据。点击这里进入datatables中文网异步加载数据说明 直接上代码 var table; var url "/Home/index"; table $(#example).DataTable({ajax: {url: url,type: "Get&q…

Chromium OS 开源项目

基于chrom浏览器的开源开发 http://www.chromium.org/chromium-os

C#生成随机字符串

public class RandomStringBuilder {/// <summary>/// 生成单个随机数字/// </summary>private int createNum(){Random random new Random(Guid.NewGuid().GetHashCode());int num random.Next(10);return num;}/// <summary>/// 生成单个大写随机字母///…

Shell图形化监控网络流量

shell图形化监控网络流量 网络流量的监控工具有很多&#xff0c;如&#xff1a;Mrtg、Cacti、Zabbix等等&#xff0c;他们都有着各自的特点&#xff0c;不同的侧重&#xff0c;只为适合不同的应用场景的各种特殊需求。除了网络流量监控工具以外&#xff0c;还有Nagios这样的监控…

JQuery Datatables editor 在编辑前刷新数据

背景 在同一时间&#xff0c;可能很多人在编辑修改同一数据&#xff0c;这会导致在一个人还在在修改的过程中另一人在完成了修改并保存了数据。editor在button插件的扩展中可以有效的缓解这个问题&#xff1a;自定义一个编辑按钮&#xff0c;此编辑按钮实现 点击按钮后&#x…

php date时间本地化问题

今天在写一个东西时&#xff0c;发现时间一直对不上&#xff0c;date("Y-m-d h:i:s") 总是与服务器时间差几个小时&#xff0e;后来发现&#xff0c;我现在的机器上的php是5.2的&#xff0e; 原来从php5.1.0开始&#xff0c;php.ini里加入了date.timezone这个选项&a…