android中的关键代码:

webview.getSettings().setJavaScriptEnabled(true);

webview.addJavascriptInterface(object,"name");//把Name="name"的对象添加到object中。object如果是this,就是window.name

webview.loadUrl("file:///android_asset/index.html");//注意这个资源的位置是跟res并列的文件夹下。


js或html中调用android中方法代码:

如:

或js中 window.name.java中的方法();

android中调用js的function方法:

Callfunction(){

webview.loadUrl("javascript: function ()");

}

需要注意的地方,很多数据类型js中不认识,最好是在android那边封装好,提供必要的方法接口。比如传到js中的list,在js中是没办法去得到里面的元素的。

addJavascriptInterface:addJavascriptInterface方法中要绑定的Java对象及方法要运行在另外的线程中,不能运行在构造他的线程中,也就是说不能运行在当前的activity线程中,就是把这个方法绑定到页面中,js也可以调用

文档中的解释:


Use this function to bind an object to Javascript so that the methods can be accessed from Javascript.

The Java object that is bound runs in another thread and not in the thread that it was constructed in.





Demo代码:

JavaJsDemo.java

package com.demo.android.JavaJsDemo;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import java.util.ArrayList;
import java.util.List;
public class JavaJsDemo extends Activity {
/** Called when the activity is first created. */
private WebView web;
public List<String> list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initData();
setContentView(R.layout.main);
web = (WebView)this.findViewById(R.id.webview);
//开启javascript设置
web.getSettings().setJavaScriptEnabled(true);
//把RIAExample的一个实例添加到js的全局对象window中
//这样就可以使用window.javatojs来调用它的方法
web.addJavascriptInterface(this, "javatojs");
//加载网页
web.loadUrl("file:///android_asset/index.html");
}
void initData(){
list=new ArrayList<String>();
for(int i=0;i<5;i++){
list.add("我是List中的第"+(i+1)+"行");
}
}
/**
* 该方法将在js脚本中,通过window.javatojs.....()进行调用
* @return
*/
public Object getObject(int index){
return list.get(index);
}
public int getSize(){
return list.size();
}
public void Callfunction(){
web.loadUrl("javascript: GetList()");
}
}

index.html


DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>demotitle><script language="javascript"> function GetList(){var i=window.javatojs.getSize();for(var n=0;n<i;n++){var jsdata= window.javatojs.getObject(n);//拿到activity里面的属性javadatavar datalistdiv = document.getElementById("datalist"); //得到页面的divpnode = document.createElement("p");//创建一个p标签,再建个textnodetnode = document.createTextNode(jsdata);pnode.appendChild(tnode);//p中加入数据datalistdiv.appendChild(pnode);//div中键入新的p}}script>head><body onload="javascript:window.javatojs.Callfunction()">//调用java方法<div id = "datalist">this is a demodiv>body>html>
posted on 2010-11-01 14:22 开花流水 阅读(3547) 评论(1) 编辑 收藏 所属分类: android

Feedback

# re: Android ---js与java的相互调用 2010-11-01 14:25 开花流水 Android源码:
public class JavaToWebview extends Activity {

private WebView web;
public List list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initData();
setContentView(R.layout.webview);
web = (WebView)this.findViewById(R.id.webview);
web.getSettings().setJavaScriptEnabled(true);//开启javascript设置
web.addJavascriptInterface(this, "javatojs");//把RIAExample的一个实例添加到js的全局对象window中, //这样就可以使用window.javatojs来调用它的方法
web.loadUrl("file:///android_asset/demo5.html");//加载网页

}
void initData(){
list=new ArrayList<String>();
for(int i=0;i<5;i++){
list.add("我是从数据库中读取的哈哈");
}
}
/**
* 该方法将在js脚本中,通过window.javatojs.....()进行调用
* @return
*/
public Object getObject(int index){
return list.get(index);
}
public int getSize(){
return list.size();
}
} 回复 更多评论

更多相关文章

  1. 怎么在button上写两行文字
  2. Android中JNI的使用方法
  3. Android(安卓)Studio第十八期 - Snaphelper
  4. Android(安卓)创建全局变量和Context
  5. 使用反射调用android API中的hide方法
  6. Broadcast详解
  7. html5 video自动播放-Android、IOS video自动播放-移动端video自
  8. android wifi状态机原理
  9. Android(安卓)中使用自定义字体的方法

随机推荐

  1. 「企业微服务架构」怎么弥合不同微服务团
  2. 【数据架构】数据湖101:概述
  3. 【数据库架构】Apache Couchdb 最终一致
  4. 微服务架构系列01:容器设计原则
  5. Vue3+ElementPlus+Koa2 全栈开发后台系统
  6. 【PostgreSQL架构】为什么关系型数据库是
  7. 报告 - 麦肯锡全球研究院 分析时代:在数据
  8. 【PostgreSQL 】PostgreSQL 12的8大改进,
  9. 【PostgreSQL 架构】PostgreSQL 11和即时
  10. 详解thinkphp+redis+队列的实现代码