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();
}