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 οnclick="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" );
…
//添加需要响应的方法,注意必须为public
public 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>
|
转载于:https://www.cnblogs.com/qishuai/p/4522210.html
webview的javascript与Native code交互相关推荐
- Android WebView与JavaScript交互详解
近期工作项目中遇到Android的WebView与js交互问题,之前也知道有这方面的技术可以实现.但在用的过程中,却发现还是需要用电心思. 现把我所了解的分享给大家,希望可以帮助到做类似项目的童鞋. ...
- 通过webView与javascript交互来研究webView的特点
1.前言 webView是android中用于展示简单的网页或者加载一些html格式的很好的选择,它提供了很多的操作上的封装但同时又不失去灵活性,因为他提供了webViewClient和webChro ...
- Android开发笔记(一百五十一)WebView与JavaScript交互的四种形式
WebView如果作为简单的网页浏览器,对于一般的浏览行为来说,已经足够了.可做为企业开发者,你的App通常要嵌入自家公司的网页,如此一来,还得考虑App与Web之间的消息传递,这就涉及到App的原生 ...
- Android WebView 和 javaScript的互相调用(三)
原文出处:http://motalks.cn/2016/08/27/Android-WebView-JavaScript-2/ WebView相关阅读 Android WebView 和 javaSc ...
- Webview与Javascript
文章目录 0x01 WebView 概述 0x02 WebView 相关工具类 2.1 WebSettings 2.2 WebViewClient 2.3 WebChromeClient 0x03 W ...
- 【Win7下Android native code的编译和调试】
光为这编译及调试环境就前后折腾了两三天,墙外找了很多教程,bill以为以下教程最为贴切 Using eclipse for android - cc Development Using eclipse ...
- [原]iOS中 Web 页面与 Native Code 的一种通信方式
在 iOS 开发中,Web 页面与 Native Code 通信可以分为两个方面: 1.Native Code 调用 Web 页面的方法:主要是调用页面中的 Javascript 函数. 2.Web ...
- Android WebView 和 javaScript的互相调用(二)
原文出处:http://blog.csdn.net/wangtingshuai/article/details/8635787 WebView相关阅读 Android WebView 和 javaSc ...
- Android WebView 和 javaScript的互相调用(一)
原文出处:http://blog.csdn.net/wangtingshuai/article/details/8631835 WebView相关阅读 Android WebView 和 javaSc ...
- Creating a Java VM from Android Native Code
If you're writing native / JNI code for Android, it's probably as native method of an Android app. T ...
最新文章
- 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?
- 快速排序java代码_8 种排序算法与 Java 代码实现!
- IOS纯手写代码支持旋屏
- C++kruskals算法生成最小协议树(附完整源码)
- 实现当前目录下开启CMD
- python pygame鼠标点击_Python中pygame的mouse鼠标事件用法实例
- syslog 华为 服务器_删除华为云服务器自带的探针
- STM32 使用片外外扩内存调试
- ioc中最基本的JAVA技术_Spring IOC 知识点总结
- 哈夫曼树(二)之 C++详解
- ssm-学子商城-项目第十三天最后一天完成项目
- 库仑计DS2781通信失败
- 98版五笔字型实用学习教程
- 服务器建文件夹,服务器建立文件夹
- [导入]polygraph3d三维运行时引擎为silverlight 1.0.zip(15.69 KB)
- Golang 标准库 tips之waitgroup详解
- redis-狂神基础版
- Android定制属于你自己的导航栏
- 上市公司股利分红数据(1991-2020)
- 通过字体名获取字体文件
热门文章
- zendstudio 的使用过程中出现 Editor could not be initialized. 的问题
- SAX方式解析XML文档
- Multipart生成的临时文件
- 经典排序算法(二十二)--图书馆排序(Library Sort)
- 经典排序算法(九)--鸡尾酒排序Cocktail Sort
- 获取笔记本序列号(SN码)命令
- MySQL error(1449) The user specified as a definer ('usertest'@'%') does not exist
- 留言板删除功能mysql_用PHP写留言板代码时怎样才能实现删除和修改留言的啊?代码是怎样的?...
- 高性能mysql系统设计_MySQL 高性能表设计规范
- linux拆除模块驱动程序会跑吗,关于移植linux驱动问题,是不是还有别的办法?...