webview的javascript与Native code交互
http://my.oschina.net/u/1376187/blog/172296
项目中使用了webview显示网页,其中需要网页和native方法有交互,搜索到一篇文章,转发分享一下:
==============================================================================================================================
- android 中的java代码调用webview里面的js脚本
- webview中的js脚本调用本地的java代码
- java调用js并传递参数
- js调用java并传递参数
- // 启用javascript
- contentWebView.getSettings().setJavaScriptEnabled(true);
- // 从assets目录下面的加载html
- contentWebView.loadUrl("file:///android_asset/wst.html");
- // 无参数调用
- contentWebView.loadUrl("javascript:javacalljs()");
功能二
- contentWebView.addJavascriptInterface(this, "wst");
javainterface实际就是一个普通的java类,里面是我们本地实现的java代码, 将object 传递给webview,并指定别名,这样js脚本就可以通过我们给的这个别名来调用我们的方法,在上面的代码中,this是实例化的对象,wst是这个对象在js中的别名
功能三
java代码调用js并传递参数
只需要在待用js函数的时候加入参数即可,下面是传递一个参数的情况,需要多个参数的时候自己拼接及行了,注意str类型在传递的时候参数要用单引号括起来
- mWebView.loadUrl("javascript:test('" + aa+ "')"); //aa是js的函数test()的参数
js调用java函数并传参,java函数正常书写,在js脚本中调用的时候稍加注意
然后在html页面中,利用如下代码,即可实现调用
- <div id='b'><a onclick="window.wst.clickOnAndroid(2)">b.c</a></div>
这里准备了一个实例,实现上面的功能
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
- <script type="text/javascript">
- function javacalljs(){
- document.getElementById("content").innerHTML +=
- "<br\>java调用了js函数";
- }
- function javacalljswithargs(arg){
- document.getElementById("content").innerHTML +=
- ("<br\>"+arg);
- }
- </script>
- </head>
- <body>
- this is my html <br/>
- <a onClick="window.wst.startFunction()">点击调用java代码</a><br/>
- <a onClick="window.wst.startFunction('hello world')" >点击调用java代码并传递参数</a>
- <br/>
- <div id="content">内容显示</div>
- </body>
- </html>
java代码 如下
- package wst.webview;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.webkit.WebView;
- import android.widget.Button;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- private WebView contentWebView = null;
- private TextView msgView = null;
- @SuppressLint("SetJavaScriptEnabled")
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- contentWebView = (WebView) findViewById(R.id.webview);
- msgView = (TextView) findViewById(R.id.msg);
- // 启用javascript
- contentWebView.getSettings().setJavaScriptEnabled(true);
- // 从assets目录下面的加载html
- contentWebView.loadUrl("file:///android_asset/wst.html");
- Button button = (Button) findViewById(R.id.button);
- button.setOnClickListener(btnClickListener);
- contentWebView.addJavascriptInterface(this, "wst");
- }
- OnClickListener btnClickListener = new Button.OnClickListener() {
- public void onClick(View v) {
- // 无参数调用
- contentWebView.loadUrl("javascript:javacalljs()");
- // 传递参数调用
- contentWebView.loadUrl("javascript:javacalljswithargs(" + "'hello world'" + ")");
- }
- };
- public void startFunction() {
- Toast.makeText(this, "js调用了java函数", Toast.LENGTH_SHORT).show();
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- msgView.setText(msgView.getText() + "\njs调用了java函数");
- }
- });
- }
- public void startFunction(final String str) {
- Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- msgView.setText(msgView.getText() + "\njs调用了java函数传递参数:" + str);
- }
- });
- }
- }
布局文件
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <WebView
- android:id="@+id/webview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="9" />
- <ScrollView
- android:id="@+id/scrollView1"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- <TextView
- android:id="@+id/msg"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:text="text" />
- </ScrollView>
- <Button
- android:id="@+id/button"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="java调用js函数" />
- </LinearLayout>
希望对大家有所帮助
http://download.csdn.net/download/wangtingshuai/5106571
====================================================================================================================
结尾总结几句:
1、webview load网页时,native code能和网页中的js相互交互并传递参数(一个参数)。
2、js调用native code那部分一下子可能看得不是很明白,这里整理一下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//native code方面//使用addJavascriptInterface绑定“wst”contentWebView.addJavascriptInterface(this, "wst");…//添加需要响应的方法,注意必须为publicpublic void startFunction(final String str) { Toast.makeText(this, "js调用了java函数", Toast.LENGTH_SHORT).show(); runOnUiThread(new Runnable() { @Override public void run() { msgView.setText(msgView.getText() + "\njs调用了java函数"); } }); }//js方面<a onClick="window.wst.startFunction('hello world')" >点击调用java代码并传递参数</a><span><span style="line-height:20px;"> </span></span> |


webview的javascript与Native code交互的更多相关文章
- cordova与ios native code交互的原理
非常早曾经写了一篇博客,总结cordova插件怎么调用到原生代码:cordova调用过程,只是写得太水.基本没有提到原理.近期加深了一点理解,又一次补充说明一下 js调用native 以下是我们产品中 ...
- Android中WebView的JavaScript代码和本地代码交互的三种方式
一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...
- [Xamarin] 透過Native Code呼叫 JavaScript function (转帖)
今天我們來聊聊關於如何使用WebView 中的Javascript 來呼叫 Native Code 的部分 首先,你得先來看看這篇[Xamarin] 使用Webview 來做APP因為這篇文章至少講解 ...
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...
- Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备
本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...
- Android混合开发之WebView与Javascript交互
前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...
- Android总结之WebView与Javascript交互[转]
Android总结之WebView与Javascript交互 前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.We ...
- Android Webview 和Javascript交互,实现Android和JavaScript相互调用
在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...
- Hybrid App: 对比UIWebView和WebKit实现JavaScript与Native交互
一.简介 在前面一篇文章中讲到过实现JavaScript与Native交互的方式有一种就是使用原生内嵌webView.在iOS8之前,开发者只能使用苹果提供的UIWebView类来加载URL或者HTM ...
随机推荐
- 团队作业8——第二次项目冲刺(Bata版本)--第二天
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 学号 成员 贡献比 201421123001 廖婷婷 15% 201421123002 翁珊 17% 201421123004 ...
- 团队作业4——第一次项目冲刺(Alpha版本)1st day
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 主界面以及游戏界面大体上完成了 界面内的功能正在写 2.登陆方面 QQ授权还未申请 申请完在登陆界面完成后实现用QQ ...
- Java课程设计-计算器
1.团队课程设计博客链接 http://www.cnblogs.com/yuanj/p/7072137.html 2.个人负责模块或任务说明 监听器的设置 3.自己的代码提交记录截图 //注册各个组件 ...
- java 程序编写规则(自己总结)
1.命名规范 (1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z).数字(0-9)和下划线"_". (2)类名是一个名词,采用大小写混合的方式,每个单词的首字母大写.例如:Us ...
- Easyui DataGrid DateRange Filter 漂亮实用的日期区间段筛选功能
自定义扩展Jquery easyui datagrid filter组件实现对日期类型区间段的筛选功能.显示效果如一下 是不是非常实用 引用的jquery 组件是 Date Range Picker ...
- Q:哪里可以注册hk域名?A:这里!这里!(小白绢挥手)
注意!前方有一条比你妈手中的竹板还硬的推文出没······ 咳咳,清清喉咙,预备唱! (请自动代入甜蜜蜜的曲调) 甜蜜蜜你笑的甜蜜蜜 好像花儿开在春风里 开在春风里 在哪里在哪里见过你 .HK域 ...
- React Native 轻松集成分享功能(iOS 篇)
产品一直催我在 RN 项目中添加分享功能,一直没找到合适的库,今天让我看到了一个插件分享给大家. 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台).支持的平台 ...
- 异常 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
使用Spring 的JDBCtemplate 调用数据库的时候 出现了如下的问题 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-S ...
- Azure SQL Database (25) Azure SQL Database创建只读用户
<Windows Azure Platform 系列文章目录> 本文将介绍如何在Azure SQL Database创建只读用户. 请先按照笔者之前的文章:Azure SQL Databa ...
- ios小型服务器环境配置
之前买的一台二手iphone4退役了,上闲鱼上一看,就值200,而且耳机声音也有点轻,估计买不了什么钱 于是网上看看能不能有什么废物利用的法子,看到说做行车记录仪的,有说做git服务器的,感觉挺有兴趣 ...