Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true
Android(Java)与JavaScript(HTML)交互有四种情况:
1) Android(Java)调用HTML中js代码
2) Android(Java)调用HTML中js代码(带参数)
3) HTML中js调用Android(Java)代码
4) HTML中js调用Android(Java)代码(带参数)
代码如下:
android端
MainActivity:
packagecom.home.jsandandroid;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.KeyEvent;
importandroid.view.View;
importandroid.webkit.WebChromeClient;
importandroid.webkit.WebSettings;
importandroid.webkit.WebView;
importandroid.widget.Toast;
publicclassMainActivityextendsActivity {
privateWebView mWebView;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
showWebView();
}
/**
* 显示webView并实现webView与js交互
*/
privatevoidshowWebView() {
try{
mWebView = newWebView(this);
setContentView(mWebView);
mWebView.requestFocus();
mWebView.setWebChromeClient(newWebChromeClient() {
@Override
publicvoidonProgressChanged(WebView view,intprogress) {
MainActivity.this.setTitle("Loading...");
MainActivity.this.setProgress(progress);
if(progress >=80) {
MainActivity.this.setTitle("JsAndroid Test");
}
}
});
mWebView.setOnKeyListener(newView.OnKeyListener() {// webview can
// go back
@Override
publicbooleanonKey(View v,intkeyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK
&& mWebView.canGoBack()) {
mWebView.goBack();
returntrue;
}
returnfalse;
}
});
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDefaultTextEncodingName("utf-8");
mWebView.addJavascriptInterface(getHtmlObject(), "jsObj");
// 此html放在assets目录下
mWebView.loadUrl("file:///android_asset/test.html");
// 如果html直接来源于网页上,可以使用下面形式
// mWebView.loadUrl("http://192.168.1.121:8080/jsandroid/index.html");
} catch(Exception e) {
e.printStackTrace();
}
}
privateObject getHtmlObject() {
Object insertObj = newObject() {
publicString HtmlcallJava() {
return"Html call Java";
}
publicString HtmlcallJava2(finalString param) {
return"Html call Java : "+ param;
}
publicvoidJavacallHtml() {
runOnUiThread(newRunnable() {
@Override
publicvoidrun() {
mWebView.loadUrl("javascript: showFromHtml()");
Toast.makeText(MainActivity.this,"clickBtn",
Toast.LENGTH_SHORT).show();
}
});
}
publicvoidJavacallHtml2() {
runOnUiThread(newRunnable() {
@Override
publicvoidrun() {
mWebView.loadUrl("javascript: showFromHtml2('IT-homer blog')");
Toast.makeText(MainActivity.this,"clickBtn2",
Toast.LENGTH_SHORT).show();
}
});
}
};
returninsertObj;
}
}
js(HTML):
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
jsandroid_testfunction showHtmlcallJava(){
var str=window.jsObj.HtmlcallJava();
alert(str);
}
function showHtmlcallJava2(){
var str=window.jsObj.HtmlcallJava2("IT-homer blog");
alert(str);
}
function showFromHtml(){
document.getElementById("id_input").value="Java call Html";
}
function showFromHtml2( param ){
document.getElementById("id_input2").value="Java call Html : "+ param;
}
hello IT-homer