之前项目做过一些Android和Html5之间js交互方面的东西,今天有时间就总结一下:
一、为什么要进行js交互:
为了方便原生开发和Html之间数据传递,在静态页面的情况下可以改变原生开发的页面;
二、如何进行js交互:
(一)Android端调用H5页面
在Android端主要使用WebView来进行网页的加载,设置属性
// 获取WebSetting对象
WebSettings webSettings = webview.getSettings();
// 设置支持javascript
webSettings.setJavaScriptEnabled(true);
// 将Android里面定义的类对象AndroidJs暴露给javascript
webview.addJavascriptInterface(newAndroidJs(MainActivity.this),"AndroidJs");
调用方式:其中doAlert为H5页面的方法
webview.loadUrl("javascript:doAlert()");
对传递的url进行拦截:
bannerWeb.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//拦截url
if (url.startsWith("weixin:") || url.startsWith("alipay") || url.startsWith("alipays")) {
try {
startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));
}catch (Exception e) {
e.printStackTrace();
}
return true;
}
return false;
}
//传递session
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
String session = SharedPrefrenceUtils.getString(BannerActivity.this, NormalConfig.SESSION, "");
synCookies(url, session);
super.onPageStarted(view, url +"?cn=" + ChannelNumber.channelNumber, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
拿到cookies
public void synCookies(String url, String cookie) {
try {
CookieManager cookieManager = CookieManager.getInstance();
//cookies是在HttpClient中获得的cooki
cookieManager.setCookie(url, cookie);
cookieManager.flush();
}catch (Exception e) {
e.printStackTrace();
}
}
网友评论