参考博客:
http://www.igooda.cn/jzjl/20141212737.html
http://blog.sina.com.cn/s/blog_8cfbb992010156ed.html
java代码:
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {
private Handler mHandler = new Handler();
private WebView mWebView;
@SuppressLint("JavascriptInterface")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setContentView(R.layout.activity_main);
// 将WebView实例化
mWebView = (WebView) this.findViewById(R.id.webView);
// WebView打开权限
mWebView.getSettings().setJavaScriptEnabled(true);
//如果需要调用js中的alert告警弹出需要设置一下参数
mWebView.setWebChromeClient(new WebChromeClient() {});
// 使得获取焦点以后可以使用软键盘
mWebView.requestFocusFromTouch();
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.e("Web_js", "加载完成");
}
});
// 允许使用JAVASCRIPT脚本
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "ncp");
mWebView.loadUrl("file:///android_asset/Test.html");
}
public class DemoJavaScriptInterface {
@JavascriptInterface // 在4.2以后的平台上版本中需要设置该注解
public void clickOnAndroid_saveIdnumber(final String value) {
Log.e("Web_js", "前台传来的值:" + value);
mHandler.post(new Runnable() {
public void run() {
// 此处调用 HTML 中的javaScript 函数
Log.e("Web_js", "去调用WAVE");
// 不传参数
// mWebView.loadUrl("javascript:wave()");
// 传二个参数
//mWebView.loadUrl("javascript:wave('" + value + "','" + value + "')");
// 传一个参数
mWebView.loadUrl("javascript:wave('" + value + "')");
}
});
}
@JavascriptInterface 在4.2以后的平台上版本中需要设置该注解
public void user(String id) {
Toast.makeText(MainActivity.this, id, Toast.LENGTH_SHORT).show();
}
}
accests中放入html , html代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
function next(){
var textvalue = (document.getElementById('num1').value);
window.ncp.clickOnAndroid_saveIdnumber(textvalue);
}
function wave(value) {
document.getElementById('num2').value= value;
}
</script>
</head>
<body >
<table width="200" height="150" border="0" cellpadding="0" cellspacing="0" bordercolor="F2F2F2">
<tr>
<td>
<input type="text" id="num1" />
<input type="text" id="num2"/>
<input type="button" name="Submit1" value="Submit1" οnclick="next();" class="BOTTOM" style= "background-color:#F2F2F2;border-width:0px "/>
</td>
</tr>
</table>
<img src="" height="100" width="100" οnclick="javascript:ncp.user('200')"/>
</body>
</html>
调用java代码中函数的两种方式
οnclick="javascript:ncp.user('200')
window.ncp.clickOnAndroid_saveIdnumber(textvalue);
其中 :mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "ncp"); 的ncp要与以上一一对应