1.跨域cookie讀取
什么是跨域,簡(jiǎn)單的說就是不同的域名,我們都知道在pc上我們用瀏覽器訪問網(wǎng)址,不同的網(wǎng)址都會(huì)在本地存儲(chǔ)一些cookie信息,這樣就可以實(shí)現(xiàn)比如自動(dòng)登錄等功能,在pc上不同域名是不能相互讀取其他域下的cookie信息的(非web專業(yè)開發(fā)人員,如果理解有誤,歡迎指出)。
但是在android上在api 23之前,是可以跨域讀取cookie的,比如A域?qū)懭胍粋€(gè)userId的cookie,B域可以讀取該值。但是在23時(shí),系統(tǒng)將該值設(shè)置成了false,不再讓跨域讀取了。如果你的應(yīng)用有跨域讀取需求,怎么辦?可以采用如下方式進(jìn)行開啟:
/*** 設(shè)置跨域cookie讀取*/
public final void setAcceptThirdPartyCookies() {
//target 23 default false, so manual set true
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {? ? ? ? ? ? CookieManager.getInstance().setAcceptThirdPartyCookies(webView,true);? ? ? ?
}??
}
2.http/https混合加載
在現(xiàn)階段,很多網(wǎng)站都改成了https進(jìn)行訪問,https可以提升訪問網(wǎng)站的安全性,防止信息被竊取,如果所有的網(wǎng)頁都是https且網(wǎng)頁內(nèi)的鏈接也是都是https,那就沒有混合加載(文本區(qū)域https,圖片文件http加載)的問題了。但是很多資源現(xiàn)階段還沒有改變成https訪問,往往頁面都嵌入了http的鏈接。這種混合網(wǎng)頁如果不進(jìn)行處理,直接加載是會(huì)出現(xiàn)錯(cuò)誤的。怎么解決這個(gè)問題?
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {?
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
這也是一個(gè)分版本的函數(shù),在api23之前,默認(rèn)是可以混合加載的,但是在23時(shí),默認(rèn)值改成了MIXED_CONTENT_NEVER_ALLOW,因此如果你有混合加載的需求,設(shè)置setMixedContentMode為MIXED_CONTENT_ALWAYS_ALLOW。
3.無法解決跨域訪問問題,可以嘗試給webview設(shè)置如下配置,已解決該問題;
if (Build.VERSION.SDK_INT >= 16) {
Class clazz =webView.getSettings().getClass();
Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);
if (method != null) {
method.invoke(webView.getSettings(), true);
}
}
} catch (IllegalArgumentExceptione) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}