一、【环境】
1.原生页面使用webView加载h5页面(浏览);
2.(购买商品时)后台h5使用cookie判断登录状态;
3.没登录情况下js调用原生登录窗口;
4.原生登录后将cookie同步到webView;
二、【步骤】
1.新开线程加载httpUrlConnection
/**检测网址*/
private void detectionUrl(final String url) {
new Thread(new Runnable() {
@Override
public void run() {
getRespStatus(url);
}
}).start();
}
2.加载html读取状态与cookie
/**获得网页请求码*/
private int getRespStatus(String htmlUrl) {
int status=0;
try {
URL url = new URL(htmlUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setUseCaches(false);//请求不能使用缓存
conn.setConnectTimeout(3000);//链接超时
status = conn.getResponseCode();
String sessionId = "";
String cookieVal = "";
String key = null;
//取cookie
for(int i = 1; (key = conn.getHeaderFieldKey(i)) != null; i++){
if(key.equalsIgnoreCase("set-cookie")){
cookieVal = conn.getHeaderField(i);
// cookieVal = cookieVal.substring(0, cookieVal.indexOf(";"));
sessionId = sessionId + cookieVal + ";";
}
}
myWv.synCookies(context,htmlUrl,cookieVal);//同步cookie到webView
} catch (IOException e) {
e.printStackTrace();
}
AutoLog.v(TAG, "H5地址-------------:" + htmlUrl + " 请求码:" + status);
return status;
}
3.同步cookie
/**
* 同步一下cookie
*/
public void synCookies(Context context, String url, String cookies) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();//移除
cookieManager.setCookie(url, cookies);//cookies是在HttpClient中获得的cookie
CookieSyncManager.getInstance().sync();
}
*注:
4.关闭webView时清空cookie
public void clearWebViewCache(Context context){
// 清除cookie即可彻底清除缓存
CookieSyncManager.createInstance(context);
CookieManager.getInstance().removeAllCookie();
}