本篇博文参考自:http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/

我们在使用webview时可以让java代码和网页中的js代码进行交互,本文就简单说明下二者是如何交互的。

一、JS调用java代码

1.1 网页的代码:

<html>
<script type="text/javascript"> function toastMessage(message) {
window.control.toastMessage(message)
} function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
}
</script>
Java-Javascript Interaction In Android
</html>

可以看见,这个网页代码中有js的代码,主要代码片段如下:

    function toastMessage(message) {
window.control.toastMessage(message)
} function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
}

可以发现这里用了一个方法:window.control.xxxxx。这里的control需要在android端实现,网页这里只需要调用就行。

调用格式为:window.jsInterfaceName.methodName(parameterValues) 此例中我们使用的是control作为注入接口名称,所以变成了:

 window.control.toastMessage(message)

1.2 Android端

package com.example.javajsinteractiondemo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast; public class MainActivity extends Activity {
private static final String LOGTAG = "MainActivity";
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final WebView myWebView = (WebView) findViewById(R.id.myWebView);
WebSettings settings = myWebView.getSettings();
settings.setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new JsInteration(), "control");
myWebView.setWebChromeClient(new WebChromeClient() {}); myWebView.loadUrl("file:///android_asset/js_java_interaction.html");
}
public class JsInteration { @JavascriptInterface
public void toastMessage(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
} @JavascriptInterface
public void onSumResult(int result) {
Log.i(LOGTAG, "onSumResult result=" + result);
}
} }

可以看到,webview中用 addJavascriptInterface 方法定义了一个注入接口和类:control & JsInteration。然后在之后就写好了JsInteration的实现方法:toastMessage & onSumResult,这样在js中调用时android就知道js用的是什么方法了。

二、java调用js

调用js的方法很简单和加载网页完全一致

基本格式:webView.loadUrl(“javascript:methodName(parameterValues)”)

例子1:

无参数方法

String call = "javascript:sayHello()";
webView.loadUrl(call);

例子2:

注意对于字符串作为参数值需要进行转义双引号

String call = "javascript:alertMessage(\"" + "content" + "\")";
webView.loadUrl(call);

关于如何安全的进行交互,避免注入攻击,请参考:http://mobile.51cto.com/aprogram-452011.htm

关于如何获取js的返回值,请参考:http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/

让Java和JavaScript进行交互的更多相关文章

  1. WebView中Java与JavaScript的交互

    原文首发于微信公众号:jzman-blog,欢迎关注交流! Android 开发过程中 WebView 的使用比较广泛,常用来加载网页,比如使用 WebView 加载新闻页面.使用 WebView 打 ...

  2. android webview与 java与javascript的交互

    webView.getSettings().setJavaScriptEnabled(true);//打开就可以用js的功能   webView.getSettings().setJavaScript ...

  3. Android中Java与JavaScript之间交互(转)

    Android代码: package com.fyfeng.testjavascript; import android.app.Activity; import android.content.In ...

  4. WebView上实现Java与JavaScript交互

    在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...

  5. Android与H5交互(java与js的交互)

    一.理论概述 1.js调用java方法 直接调用WebView的该方法就可以添加接口了,不过先要启动交互 // 启用javascript mWebView.getSettings().setJavaS ...

  6. Java和JavaScript中使用Json方法大全

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka   摘要:JSON(JavaScript Object Notation) 是一种轻量级的数 ...

  7. Nashorn 在JDK 8中融合Java与JavaScript之力

    从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调 ...

  8. Nashorn——在JDK 8中融合Java与JavaScript之力

      从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript ...

  9. javascript与java的相互调用,纯java的javascript引擎rhino(转载)

    1.下载Rhino安装包,下载地址:官网http://www.mozilla.org/rhino. 2.rhino环境配置,把解压出来的js.jar文件加入到系统的环境变量classpath 3.在命 ...

随机推荐

  1. PHP并发操作下的加锁

    最近做后台统计的工具,统计肯定是一个需要运算好久的数据 容许一个用户在一个时间内进行操作,这个时候就需要用到锁了,将这个操作过程锁起来.在用了cache的时候,cache失效可能导致瞬间的多数并发请求 ...

  2. 【LOJ】#2585. 「APIO2018」新家

    题解 成功把自己写自闭了 离散化之后再二分我是真不会算坐标啊我这个zz 先离散化所有坐标,然后对于每个位置维护一个最小前驱,然后线段树区间维护最小前驱 什么?位置一样?那就给每个大小为1的位置开个mu ...

  3. 【Codechef】BB-Billboards

    题解 传说中的--半标准杨表(行单调不增,列单调减) 如果N能整除M,我们把序列分成\(\frac{N}{M}\)段 然后里面要填K个1,显然我每一段必须填K个1,且可以构造出合法的序列,所以最少要填 ...

  4. 【LOJ】#2107. 「JLOI2015」城池攻占

    题解 用一个平衡树维护能攻占到u点的骑士,合并到父亲的时候去掉攻击力小于父亲生命值的那部分,只要把那棵树拆掉并且将树中的所有骑士更新一下答案,用无旋式treap很好写 合并的时候只要启发式合并就可以了 ...

  5. 话说 SVN 与 Git 之间的区别

    如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果 ...

  6. 038 spark中使用sparksql对日志进行分析(属于小案例)

    一:使用sparksql开发 1.sparksql开发的两种方式 HQL:SQL语句开发 eq : sqlContext.sql("xxxx") DSL : sparkSql中Da ...

  7. codevs 1795 金字塔 2

    codevs 1795 金字塔 2这个题比完全背包多了一个总数的限制,即一定要选(m+n)个,题中说总重量不超过n,所以至少选择m个重量为0的,然后初始化的时候,都填成重量为0的,然后再一个个地把它们 ...

  8. 001.MySQL高可用主从复制简介

    一 简介 1.1 概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布在多个系统之上,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves ...

  9. js加入购物车抛物线动画

    天猫将商品加入购物车会有一个抛物线动画,告诉用户操作成功以及购物车的位置,业务中需要用到类似的效果,记录一下实现过程备忘,先上demo 一开始没有想到用抛物线函数去做,也已经忘记还有这么个函数了,想着 ...

  10. JMS Java消息服务(Java Message Service)

    JMS 在一些场景下RPC的同步方式可能不太适合业务逻辑的处理,并且这种方式在某些场景下会导致业务的紧耦合. 基于异步交互模型的JMS解决了RPC产生的紧耦合问题,它提供了一个可以通过网络访问的抽象消 ...