Android通过webview和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" xml:lang="zh-CN" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<input type="button" value="Say hello"
onClick="goHomepage.showToast()" />
</body>
</html>
再来看看Android 端代码
WebSettings ws = webView.getSettings();
ws.setJavaScriptEnabled(true);//开启JavaScript支持
ws.setLoadWithOverviewMode(true);
ws.setUseWideViewPort(true);
webView.setHorizontalScrollBarEnabled(false);//水平不显示 滚动条
webView.setVerticalScrollBarEnabled(false); //垂直不显示
webView.addJavascriptInterface(this, "goHomepage");
// 开启DOM缓存,开启LocalStorage存储(html5的本地存储方式)
webView.getSettings().setDomStorageEnabled(true);
webView.requestFocusFromTouch();
webView.requestFocus();
ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 适应屏幕,内容自动缩放
webView.loadUrl("file:///android_asset/web_dten/test.html");
@JavascriptInterface
public void showToast() {
startActivity(new Intent(this, HomeActivity.class));
finish();
}
以上方式只是适合API16以上,那么API16下是怎么处理的呢?看代码
webView.addJavascriptInterface(new ToActivityInterface(WebviewActivity.this), "goHomepage");
public class ToActivityInterface {
private Context context;
private ToActivityInterface(Context context) {
this.context = context;
}
@JavascriptInterface
publicvoid showToast() {
startActivity(new Intent(context, HomeActivity.class));
finish();
}
}
其它地方不变,只是这个接口得自己实现,由于安全问题,所以API16之后,google已经帮我们封装了。
注意:需要调用的方法千万别写成私有的:private