android软件开发之webView.addJavascriptInterface循环渐进【二】
说明
文章列表
android软件开发之webView.addJavascriptInterface循环渐进【一】: http://www.sollyu.com/?p=302
android软件开发之webView.addJavascriptInterface循环渐进【二】: http://www.sollyu.com/?p=586
上一篇文章发布之后,得到了大家的一致好评,在文章中答应出的第二篇也一直一直没有出来,今天就补出来。OK话不多,咱明直接开始,因为上一篇的文章写的时间已经过早,已经没有办法还原原工程,所以我这里就新建了一个工程。
新建工程
为了让大家更容易的理解,所以我这里就尽量的将代码缩短,这是我的工程的配置

创建好工程之后,然后将界面调整为下面这样

添加代码
首先将两个button和webview添加进来,并给web添加两个JavaScript调用接口,testFunc1和testFunc2
private Button m_testButtom1;
private Button m_testButtom2;
private WebView m_WebView; @SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); m_testButtom1 = (Button)findViewById(R.id.button1);
m_testButtom2 = (Button)findViewById(R.id.button2);
m_WebView = (WebView)findViewById(R.id.webView1); m_WebView.getSettings().setJavaScriptEnabled(true);
m_WebView.addJavascriptInterface(new Object(){
@SuppressWarnings("unused") // 这两个函数可以在JavaScript中调用
public void testFunc1(String string) {messageHandler.obtainMessage(MessageHandler.WM_SET_FUNC1, string).sendToTarget(); } @SuppressWarnings("unused")
public void testFunc2(String string) { messageHandler.obtainMessage(MessageHandler.WM_SET_FUNC2, string).sendToTarget();}
}, "demo"); m_WebView.loadUrl("file: ///android_asset/demo.html");
}
可以看到里面用到了一个messageHandler,我们看一下他具体的定义,这个类主要就是用来JavaScript交互的,JavaScript会使用这个消息来和我们的UI进行交互,同样上一篇也有说过
Looper looper = Looper.myLooper(); //得到当前线程的Looper实例,由于当前线程是UI线程也可以通过Looper.getMainLooper()得到
private Handler messageHandler = new MessageHandler(looper);//此处甚至可以不需要设置Looper,因为 Handler默认就使用当前线程的Looper public class MessageHandler extends Handler {
public static final int WM_SET_FUNC1 = 0;
public static final int WM_SET_FUNC2 = 1;
public MessageHandler(Looper looper) { super(looper); }
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case WM_SET_FUNC1:
Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_LONG).show();
break;
case WM_SET_FUNC2:
Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
添加完成之后,在来添加按钮点击事件
m_testButtom1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String string = "http://www.sollyu.com";
m_WebView.loadUrl("javascript:testFunc1('"+string+"');"); // 调用html中的JavaScript函数testFunc1,这里只有一个参数
}
});
m_testButtom2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String string = "这里有两个参数:";
int nInt = 191067617;
m_WebView.loadUrl("javascript:testFunc2('"+string+"',"+String.valueOf(nInt)+")"); // 通用这里有2个参数
}
});
这样在Android的代码就算写完了,下面在来看一下demo.html
Html文件
demo.html源代码为:
<html>
<script language="javascript">
function testFunc1(var1)
{
return_var = "原创文章:" + var1;
window.demo.testFunc1(return_var); // 调用Android代码中的 testFunc1 的函数
return return_var;
}
function testFunc2(var1,var2)
{
return_var = var1 + var2;
window.demo.testFunc2(return_var); // 这里的参数就为返回到android的值
return return_var;
}
</script>
</html>
运行截图


android软件开发之webView.addJavascriptInterface循环渐进【二】的更多相关文章
- android软件开发之webView.addJavascriptInterface循环渐进【一】
本篇文章由:http://www.sollyu.com/android-software-development-webview-addjavascriptinterface-cycle-of-gra ...
- Android安全开发之WebView中的地雷
Android安全开发之WebView中的地雷 0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者 ...
- Android混合开发之WebView与Javascript交互
前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...
- Android混合开发之WebView使用总结
前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...
- android基础开发之WebView
WebView 是android平台沟通 http & H5 页面的桥梁. 但是google对这块的表述不是很清晰,而且SDK里面基本看不到源码,只有一个接口而已. 传送:http://dev ...
- Android软件开发之ListView 详解【转】
ListView的使用方法 ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView ,今天我通过一个demo来教大家怎么样使用ListView组件 绘 ...
- 【Android】Android软件开发之ListView 详解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xys289187120.blog.51cto.com/3361352/65717 ...
- Android安全开发之WebView中的大坑
0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等.WebView功能强大 ...
- Android 软件开发之 PreferenceActivity 中的组件
1.PreferenceActivity 介绍 PreferenceActivity 继承ListActivity 它是以一个列表的形式在展现内容,它最主要的特点是添加Preference可以让控件的 ...
随机推荐
- UVa1328 - Period(KMP找最短循环节)
题目大意 给定一个长度为n的字符串,求它的每个前缀的最短循环节 题解 白书例题~~~ "错位部分"长度为i-f[i], 如果这个前i个字符能够组成一个周期串,那么"错位& ...
- unexpected error ConnectionError object has no attribute
unexpected error ConnectionError object has no attribute
- storm-starter项目概述
storm-starter项目包含使用storm的各种各样的例子.项目托管在GitHub上面,其网址为: http://github.com/nathanmarz/storm-starter stor ...
- PAT 1003. Emergency (25)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- 【转】html input radio取得被选中项的value
html代码: <input id="rad" name="rad" type="radio" value="1" ...
- DevExpress GridControl 显示行号、设置行号宽
显示行号类 /// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="g ...
- 理解SQL Server中索引的概念
T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他 简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...
- freemarker list (长度,遍历,下标,嵌套,排序)
1. freemarker获取list的size : Java ArrayList<String> list = new ArrayList<String>(); Freema ...
- python学习(3)
Python学习(3)切片(Slice):根据索引范围取出字符串里面的内容,比如: l=range(100) l[:8] [0, 1, 2, 3, 4, 5, 6, 7] ...
- Web挖掘技术
一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...