随着前端技术的发展与H5的广泛使用,移动端采用native+h5的方式越来越多了,对于Android来说就涉及到java与js的交互,相互调用传参等。下面就来看一下java与js交互的简单demo。
方式 实现js调用java有四种方式: 1.JavascriptInterface 2.WebViewClient.shouldOverrideUrlLoading() 3.WebChromeClient.onConsoleMessage() 4.WebChromeClient.onJsPrompt() JavascriptInterface
这种方式是Android官方提供的Javascript与Native通信的解决方案。 java中创建接口 public class DemoInteface {
@android.webkit.JavascriptInterface
public void fromJs(String toast) {
Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show();
}
} 将接口添加到WebView中 webView = (WebView) findViewById(R.id.wb);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/test.html");
webView.addJavascriptInterface(new DemoInteface(), "demo"); 将接口添加到WebView中 <body> <a href="javascript:;" class="m-btn" onclick="showToast('js的问候送达')">Toast</a> <script language="javascript"> function showToast(toast) {
javascript:demo.fromJs(toast);
}; </script>
</body> 注意js中的javascript:demo.fromJs(toast); 其中类名(dmeo)要与 webView.addJavascriptInterface(new DemoInteface(), “demo”);中第二个参数一致,方法名要与接口中方法的名称一致

    WebViewClient.shouldOverrideUrlLoading()
这个方法是拦截webview中所有的url跳转,根据url来判断是否拦截,来执行不同的操作 java代码 public class CustomWebViewClient extends WebViewClient { @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("toast")) {
Log.e("yue", url);
Toast.makeText(MainActivity.this, "拦截成功了", Toast.LENGTH_SHORT).show();
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
} webView.setWebViewClient(new CustomWebViewClient()); js代码 <a href="https://www.baidu.com/?=toast" class="m-btn">Toast2</a>
1

    WebChromeClient.onConsoleMessage()
这是Android提供给Javascript调试在Native代码里面打印日志信息的API。 java public class CustomWebChromeClient extends WebChromeClient { @Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
super.onConsoleMessage(consoleMessage);
String msg = consoleMessage.message();//Javascript输入的Log内容
Log.d("fromjs",msg);
return true;
}
} webView.setWebChromeClient(new CustomWebChromeClient()); js代码 <a href="javascript:;" class="m-btn" onclick="log()">log</a> function log(){
console.log('log info from js');
}

    WebChromeClient.onJsPrompt()
除了WebChromeClient.onJsPrompt(),还有WebChromeClient.onJsAlert()和WebChromeClient.onJsConfirm()。顾名思义,这三个Javascript给Native代码的回调接口的作用分别是提示展示提示信息,展示警告信息和展示确认信息。因为极少会用这几种,所以这里就不多做介绍 实现java调用js: 上面说了js调用java有很多方式,常用也是官方推荐的就是前两种,而java调用js就只有一种方式,WebView.loadUrl(),androi 4.4(api 19)以上出现了WebView.evaluateJavascript()来代替loadUrl。 java代码 button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (android.os.Build.VERSION.SDK_INT >= 19) {
webView.evaluateJavascript("javascript:wave()", null);
} else {
webView.loadUrl("javascript:wave('')");
}
}
}); js代码 var flag = false;
function wave() {
if(!flag){
flag = true;
document.getElementById("droid").src="testb.png";
}else{
flag = false;
document.getElementById("droid").src="testa.png";
} }


以上就是一些简单的js与java的交互。要想实现复杂的交互逻辑,可以使用jsBridge这一第三方框架,吓篇博客讲会介绍这一框架的使用及原理。

代码下载: http://download.csdn.net/detail/qq_27942511/9832172

java与js交互,相互调用传参的更多相关文章

  1. gwt中java与js的相互调用

    1. java通过jsni调用内部js Button button = new Button("java调用内部jsni的js方法"); button.addClickHandle ...

  2. Android与JS交互,json传参问题

    一.JS调用Android的方法 JS调用安卓的方法,并且传递的参数为json格式的字符串(JSONObject.toString()), 例如: var json = {"name&quo ...

  3. Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

  4. Android WebView加载本地html并实现Java与JS交互

    最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...

  5. JAVA与.NET的相互调用——通过Web服务实现相互调用

    JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...

  6. 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js

    iOS js oc相互调用(JavaScriptCore)   从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这 ...

  7. Unity3D中C#和js方法相互调用

    通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...

  8. .Net 与 Java 的服务接口相互调用

    本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...

  9. JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯

    分布式开发的历史 利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.NET与JAVA开发当中,对Remote远程对象早已有着足够的支持(对Remote远程对象调用 ...

随机推荐

  1. if语法

    语法一: if 条件:   条件成立时执行的子代码块 age_of_girl=31 if age_of_girl > 30: print('阿姨好') 语法二:if + else   if 条件 ...

  2. django中表单处理

    在web端与后端交互时,我们除了使用html原生的form标签,还可以使用django自带的表单. Django 提供广泛的工具和库来帮助你构建表单来接收网站访问者的输入,然后处理以及响应输入. HT ...

  3. Linux学习笔记之Linux运行脚本时 $'\r' 错误

    1.Windows上操作 用notepad++编译器打开脚本,编辑->文档格式转换->转换为UNIX格式,然后保存. 重新上传.运行,问题解决 2.Linux上操作 用vi/vim命令打开 ...

  4. php+js的 authcode 混淆加密和解密,php和js可以通用加密和解密

    <script> //md5.js var hexcase = 0; function hex_md5(a) { return rstr2hex(rstr_md5(str2rstr_utf ...

  5. Bootstrap表单样式

    <form class="form-horizontal" role="form"> <fieldset> <legend> ...

  6. eclipse maven jar工程导出项目依赖的jar包

    今天遇到个事,给业务开发/测试搞个了转换工具,是使用swing写的,依赖了很多的三方包,为了方便打算以bat方式提供,但是要导出依赖的三方jar,网上搜了下,如下(已测试): 一.导出到默认目录 ta ...

  7. centos 7 安装使用 redis

    1.下载redis,用wget就行,版本在这里找: http://download.redis.io/releases/ 2.安装gcc,tcl,用yum 安装. 3.解压,make ,make in ...

  8. 辅助模块:udp_sweep

    辅助模块:udp_sweep 模块介绍 使用udp对指定IP地址主机进行udp扫描 实践过程 利用该模块填写目的IP来对目的IP地址进行扫描 从结果可以看到扫描结果显示扫描过程放出了13个探针,发现了 ...

  9. CentOS 7 install slurm cluster

    //slurm install //CentOS 7 system //192.168.159.141 node01 //192.168.159.142 node02 systemctl stop f ...

  10. git如何修改用户名和邮箱名?

    答: 使用git config --global --edit即可进行修改