Android----WebView与JavaScript交互调用(2)
上一篇文章主要讲解了如何在js中调用java函数
地址:http://www.zzzyk.com/kf/201205/132839.html
这一篇将js与java相互调用再来一个例子,解决相互调用之间的关系。
首先说明一重要代码的情况:
android中的关键代码:
webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInte易做图ce(object,"name"); //把Name="name"的对象添加到object中。object如果是this,就是window.name
webview.loadUrl("file:///android_asset/index.html"); //注意这个资源的位置放在assets文件夹下。
js或html中调用android中方法代码:
js中使用 window.name.java中的方法();
android中调用js的function方法:
Callfunction(){
webview.loadUrl("javascript: function ()");
需要注意的地方,很多数据类型js中不认识,最好是在android那边封装好,提供必要的方法接口。比如传到js中的list,在js中是没办法去得到里面的元素的。
addJavascriptInte易做图ce:addJavascriptInte易做图ce方法中要绑定的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.
下面给出具体的测试代码:
1、Activity 代码
[java]
public class TestWebView extends Activity {
private WebView mWebView;
private List<String> list;
private int mkeyCode;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.htmlview);
initData();
WebSettings webSettings = mWebView.getSettings();
// 是否允许在webview中执行javascript
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInte易做图ce(this, "javatojs");
//加载网页
mWebView.loadUrl("file:///android_asset/index.html");
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
mkeyCode = keyCode;
Log.i("AA","keyCode="+keyCode);
mWebView.loadUrl("javascript: OnKeyUp()");
return super.onKeyUp(keyCode, event);
}
public int getKeyCode(){
return mkeyCode;
}
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) {
Log.i("A","getObject");
return list.get(index);
}
public int getSize() {
Log.i("A","getSize");
return list.size();
}
public void Callfunction() {
Log.i("A","Callfunction");
mWebView.loadUrl("javascript: GetList()");
}
public void printStr(String str){
Log.i("A","GetList:" + str);
}
}
public class TestWebView extends Activity {
private WebView mWebView;
private List<String> list;
private int mkeyCode;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.htmlview);
initData();
WebSettings webSettings = mWebView.getSettings();
// 是否允许在webview中执行javascript
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInte易做图ce(this, "javatojs");
//加载网页
mWebView.loadUrl("file:///android_asset/index.html");
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
mkeyCode = keyCode;
Log.i("AA","keyCode="+keyCode);
mWebView.loadUrl("javascript: OnKeyUp()");
return super.onKeyUp(keyCode, event);
}
public int getKeyCode(){
return mkeyCode;
}
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) {
Log.i("A","getObject");
return list.get(index);
}
public int getSize() {
Log.i("A","getSize");
return list.size();
}
补充:移动开发 , Android ,