android開發(fā)中,webview常用于顯示網(wǎng)頁或h5頁面,一個(gè)遇到跨域方面的坑。

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

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在學(xué)習(xí)WebView的時(shí)候就知道了WebView會(huì)出現(xiàn)很多稀奇古怪的問題,真碰上的時(shí)候還是焦頭爛額,很多問題的解決...
    _戲_夢(mèng)閱讀 6,100評(píng)論 2 35
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,388評(píng)論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,326評(píng)論 25 708
  • 十幾年前,我是那么地喜歡《BJ單身日記》第一部。看了好多遍。 喜歡她在沙發(fā)上唱《All By Myself》,喜歡...
    晨熙9閱讀 534評(píng)論 0 4

友情鏈接更多精彩內(nèi)容