本篇文章由:http://www.sollyu.com/android-software-development-webview-addjavascriptinterface-cycle-of-gradual-two/

说明

文章列表

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循环渐进【二】的更多相关文章

  1. android软件开发之webView.addJavascriptInterface循环渐进【一】

    本篇文章由:http://www.sollyu.com/android-software-development-webview-addjavascriptinterface-cycle-of-gra ...

  2. Android安全开发之WebView中的地雷

    Android安全开发之WebView中的地雷 0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者 ...

  3. Android混合开发之WebView与Javascript交互

    前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...

  4. Android混合开发之WebView使用总结

    前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...

  5. android基础开发之WebView

    WebView 是android平台沟通 http & H5 页面的桥梁. 但是google对这块的表述不是很清晰,而且SDK里面基本看不到源码,只有一个接口而已. 传送:http://dev ...

  6. Android软件开发之ListView 详解【转】

    ListView的使用方法  ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView ,今天我通过一个demo来教大家怎么样使用ListView组件 绘 ...

  7. 【Android】Android软件开发之ListView 详解

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

  8. Android安全开发之WebView中的大坑

    0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等.WebView功能强大 ...

  9. Android 软件开发之 PreferenceActivity 中的组件

    1.PreferenceActivity 介绍 PreferenceActivity 继承ListActivity 它是以一个列表的形式在展现内容,它最主要的特点是添加Preference可以让控件的 ...

随机推荐

  1. Storm系列(五)架构分析之Nimbus启动过程

    启动流程图   mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj ...

  2. 不只是打车软件,中国车主们赋予了Uber更多意义

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. [置顶] 程序员必知(三):一分钟知道URI编码(encodeURI)

    因为浏览器会用一些特殊的字符作为特定的意义,所以在要传输的内容上如果有这些特殊的字符的话,就需要对其进行转义才能正确传输,如以下字符为发送时候的关键字,即特殊字符 ;/?:@&=+$,# 所以 ...

  4. 如何获取web中某个元素的id

    1.在原始的web界面上,切换到开发者模式,一般都有快捷键,本机的快捷键为(Ctrl+shift+I) 2.在开发者模式界面的左上角有一个放大镜的工具,点击一下,再去界面中找相应的元素,之后就可以定位 ...

  5. Spring mvc Interceptor 解决Session超时配置流程

    最近公司内部框架中对Session超时这一功能未实现,由于采用iframe结构,Session超时后,当点击左侧系统菜单时,会在iframe的右侧再次弹出登陆框. 该问题是由于没有设置拦截器造成. 添 ...

  6. 找出数组前N大的数

    这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二 ...

  7. HDInsight-Hadoop实战(一)站点日志分析

    HDInsight-Hadoop实战(一)站点日志分析 简单介绍 在此演示样例中.你将使用分析站点日志文件的 HDInsight 查询来深入了解客户使用站点的方式.借助此分析.你可查看外部站点一天内对 ...

  8. MySQL启动和关闭服务命令

    MySQL启动和关闭服务命令 1.启动服务命令 net start mysql 2.关闭服务命令 net stop mysql

  9. ThinkPHP3.1新特性:命名范围

    概述 命名范围功能,给模型操作提供了一系列的(连贯操作)封装,让你更方便的查询和操作数据.我们来具体了解下这一用法. 定义属性 要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连 ...

  10. Spring安全资料整理列表

    Spring 被爆漏洞,允许远程执行代码http://automationqa.com/forum.php?mod=viewthread&tid=2827&fromuid=21 Spr ...