
1.4.1 Java中调用javascript方法[掌握]
1.4.2 javascript调用Java方法 [掌握]
第一:Java中调用javascript方法
1.android中利用webview调用网页上的js代码。
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,然后通过loadUrl就可以直接进行调用,如下所示:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");
android:layout_height="match_parent" android:orientation="vertical" > android:layout_width="match_parent" android:layout_height="match_parent" />
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.WebView;
public class JSandJavaActivity extends Activity {
WebView webView= null;
Handler handler = new Handler();//进行异步通讯
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview_androidcalljs);
webView = (WebView) this.findViewById(R.id.webview2);
//只有设为true才能与javascript进行通讯
webView.getSettings().setJavaScriptEnabled(true);
//让javascript能调用java中的方法
webView.addJavascriptInterface(new Object(){
public void show(){
handler.post(new Runnable(){
@Override
public void run() {
//webView.loadUrl("javascript:pageini()");
webView.loadUrl("javascript:personlist('"+query()+"')");//调用javascript函数
}
});
}
}, "caller");
String path="file:///android_asset/androidcalljs.html";
webView.loadUrl(path);//载入页面
}
public static String query(){//构造json对象
JSONArray array = null;
try {
JSONObject object = new JSONObject();
object.put("id", 1);
object.put("name
object.put("age", 23);
object.put("address", "HZ");
JSONObject object2 = new JSONObject();
object2.put("id", 2);
object2.put("name
object2.put("age", 24);
object2.put("address", "SH");
array = new JSONArray();
array.put(object);
array.put(object2);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return array.toString();
}
}
Html:
| id | name | age | address |
第二:javascript中调用方法Java
2. 网页上调用android中java代码的方法
在网页中调用java代码,需要在webview控件中添加javascriptInterface。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(Test.this, "测试调用java", Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
在网页中,只需要像调用js方法一样,进行调用就可以
android:layout_width="match_parent" android:layout_height="match_parent" > android:layout_width="match_parent" android:layout_height="match_parent" />
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class WebViewJavaScriptDemo extends Activity
{
WebView myWebView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.webview_jscallandroid);
myWebView = (WebView) findViewById(R.id.webview);
// 此处为了简化编程,使用file协议加载本地assets目录下的HTML页面
// 如果有需要,也可使用http协议加载远程网站的HTML页面。
myWebView.loadUrl("file:///android_asset/jscallandroid.html");
// 获取WebView的设置对象
WebSettings webSettings = myWebView.getSettings();
// 开启JavaScript调用
webSettings.setJavaScriptEnabled(true);
// 将MyObject对象暴露给JavaScript脚本
// 这样test.html页面中的JavaScript可以通过myObj来调用MyObject的方法
myWebView.addJavascriptInterface(new MyObject(this), "myObj");
}
}
onclick="myObj.showToast('孙悟空');" />
onclick="myObj.showList();" />
import android.app.AlertDialog;
import android.content.Context;
import android.widget.Toast;
public class MyObject{
Context mContext;
MyObject(Context c){
mContext = c;
}
// 该方法将会暴露给JavaScript脚本调用
public void showToast(String name)
{
Toast.makeText(mContext, name + ",您好!", Toast.LENGTH_LONG).show();
}
// 该方法将会暴露给JavaScript脚本调用
public void showList()
{
// 显示一个普通的列表对话框
new AlertDialog.Builder(mContext)
.setTitle("图书列表")
.setIcon(R.drawable.ic_launcher)
.setItems(new String[]{"Java讲义"
, "Android讲义" , "轻量级Java EE企业应用实战"} , null)
.setPositiveButton("确定", null)
.create()
.show();
}
}
