android中webviewjs与java的相互调用

泡在网上的日子 / 文 发表于2013-04-02 00:58 次阅读 WebView

实现的方法是将数据通过js传递到html页面中。

android中的关键代码:


webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(object,”name”);//把object添加到window中。Name=”name”;
webview.loadUrl(“file:///android_asset/index.html”);//注意这个资源的位置是跟res并列的文件夹下。


jshtml中调用android中方法代码:

        如:<a onClick=”window.name.java中的方法()”>

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


android中调用jsfunction方法:
        Callfunction(){
               webview.loadUrl(“javascript: function ()”);

        }


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

以下是源码:

html的源码

<script language=”javascript“>
           window.onload= function(){
var i=window.javatojs.getSize();
                        for(var n=0;n<i;n++){
varjsdata= window.javatojs.getObject(n);//拿到activity里面的属性javadata
vardatalistdiv = document.getElementById(“datalist“); //得到页面的div
pnode = document.createElement(“p”);//创建一个p标签,再建个textnode
tnode = document.createTextNode(jsdata);
pnode.appendChild(tnode);//p中加入数据
datalistdiv.appendChild(pnode);//div中键入新的p
      }
}
</script>
<body>
<div id = “datalist“>
this is a demo
</body>
Android源码:
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()");
}
}


收藏 赞 (0) 踩 (2)
上一篇:Android支持水平滚动的ListView控件
前言 ListView是一个纵向滚动的列表视图,也有朋友嵌套HorizontalScrollView来实现,比如 这里 ,但在ListView的API中明确指明了两者不可同时使用。本文分享一种办法,以方便有此需求的朋友。 正文 一、本文目标 效果图: a). 支持ListView横行滚动 b). 支持
下一篇:Android中如何实现WebView与JavaScript的相互调用
这一篇将讲解WebView中JavaScript与java相互调用的一个例子。 首先说明一重要代码的情况: android中的关键代码 : webview.getSettings().setJavaScriptEnabled(true);webview.addJavascriptInterface(object,"name"); //把Name="name"的对象添加到object中