android中的關鍵代碼: javascript
webview.getSettings().setJavaScriptEnabled(true); html
webview.addJavascriptInterface(object,"name");//把Name="name"的對象添加到object中。object若是是this,就是window.name java
webview.loadUrl("file:///android_asset/index.html");//注意這個資源的位置是跟res並列的文件夾下。 node
js或html中調用android中方法代碼: android
如: web
或js中 window.name.java中的方法(); 數據庫
android中調用js的function方法: app
Callfunction(){ ide
webview.loadUrl("javascript: function ()"); post
}
須要注意的地方,不少數據類型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裏面的屬性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>
<body onload="javascript:window.javatojs.Callfunction()">//調用java方法
<div id = "datalist">
this is a demo
div>
body>
html>