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可以让控件的 ...
随机推荐
- centos 7 安装mp3解码器
1. Install the nux repo $> su - $> yum update # optional but recommanded $> rpm --import h ...
- ios iphone 将log在终端输出
对于模拟器,其在终端的log文件位于: -/Library/Logs/CoreSimulator/C4B94BA6-EF08-4AD2-AE7D-1A3A2E2AC545/system.log 对 ...
- poj1515--Street Directions(边的双连通)
给一个无向图,要求变成强连通的有向图,需要保留哪些边. 边的双连通,对于桥保留两条边,其他的只保留一条边.求双连通的过程中记录保留边. /******************************* ...
- 通过分析 JDK 源代码研究 Hash 存储机制
通过 HashMap.HashSet 的源代码分析其 Hash 存储机制 实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元 ...
- oc学习之路----代理模式
今天刚学完oc的代理模式,觉得有点新奇,第一次接触,原理 A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的 ...
- C#编译器怎么检查代码是否会执行
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#编译器怎么检查代码是否会执行.
- background-position也许你没考虑到
设置背景图片时不知你有没有遇到过背景位置的困扰,有没有深入思考过,background-position到底是什么,下面请各位看看我的理解. 简而言之就一句话,默认图片左上角居元素左上角的坐标,例如: ...
- android应用程序的优先级
andorid系统为保障应用程序运行的流畅性,当内存资源比较匮乏的时候会杀死那些优先级比较低的进程 android进程的优先级如下图: 1.活动进程: 是指那些正在与用户进行交互的应用程序进程,这种组 ...
- qt软键盘输入
characterapplicationsignalqt输入法object 1.从QInputContext派生自己的InputContext类 ,例如: class MyInputPanelCo ...
- javascript变量提升
提升是一种将变量和函数的声明移到函数作用域(如果不在任何函数内的话就是全局作用域)最顶部的机制. 提升影响了变量的生命周期,一个变量的生命周期包含3个阶段: 声明——创建一个新变量,例如var myV ...