介绍:
Android的开发中除了本地app的处理外,有时需要与html5的交互,与html5的交互无非两种情况。
1:html5调用app本地的方法。
例如,在一个网页上点击一个分享按钮控件,这时会弹出本地原生的一键分享界面,通过html5调用本地方法将值传给本地分享所需的值。
2:app调用html5的javaScript方法。
同样是分享,例如,在app上原生界面上点击分享按钮然后调用html5的javaScript方法,javaScript方法里面在调用本地原生的一键分享界面。
如何使用:
wv_demo.loadUrl(url);
wv_demo.setWebViewClient(new webViewClient());
wv_demo.getSettings().setJavaScriptEnabled(true);
wv_demo.addJavascriptInterface
(new mJavaScriptinterface(), "JSmeg");
//javaScript调android本地方法
class mJavaScriptinterface {
@JavascriptInterface //不能缺少
public void getShareInfo(String desc, String url, String title, String img) {
//本地方法
}}
private class webViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}}
html5调用app本地的方法,JSmeg是html5上的javaScript方法里面的关键字,通过这个关键字将app本地方法绑定到一块,调用本地getShareInfo方法。
js = "var newscript = document.createElement(\"script\");";
js += "newscript.src=\"http://www.test.com/resource/js/androidgetinfo.js\";";
js += "document.body.appendChild(newscript);";
wv_demo.loadUrl(url);
wv_demo.setWebViewClient(new webViewClient());
wv_demo.getSettings().setJavaScriptEnabled(true);
bt_test1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHandler.post(new Runnable() {
@Override
public void run() {
wv_demo.loadUrl("javascript:androidGetInfo()");
//Android本地调用html中的javaScript 函数
}
});
}});
private class webViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
wv_demo.loadUrl("javascript:" + js);
//加载网络javascript方法
}}
app调用html5的javaScript方法,首先app在onPageFinished方法里面先加载javaScript方法,然后在app本地按钮监听方法里面调用html中的javaScript 函数。
网友评论