android java js_Android ---js与java的相互调用

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 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();

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">

demotitle>

function GetList(){

var i=window.javatojs.getSize();

for(var n=0;n

var jsdata= window.javatojs.getObject(n);//拿到activity里面的属性javadata

var datalistdiv = document.getElementById("datalist"); //得到页面的div

pnode = document.createElement("p");//创建一个p标签,再建个textnode

tnode = document.createTextNode(jsdata);

pnode.appendChild(tnode);//p中加入数据

datalistdiv.appendChild(pnode);//div中键入新的p

}

}

script>

head>

//调用java方法

this is a demo

div>

body>

html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值