介紹
最近新?lián)Q了一份工作,公司的項(xiàng)目全是用幾個(gè)基礎(chǔ)框架去嵌套UIWebview,來實(shí)現(xiàn)不同客戶的需求。由于客戶抱怨UIWebvie加載速度太慢,容易Crash等問題,決定將UIWebview替換成WKWebView。那么問題就來了,因?yàn)閃KWebView的cookie注入的時(shí)機(jī)有很大問題,我在網(wǎng)上查閱了很多資料最終解決了這個(gè)問題。(特別是登錄和登出的時(shí)候狀態(tài)都有問題)。
1.保持cookie同步
因?yàn)閃KWebview deCookie 是與系統(tǒng)分開的,如果使用兩個(gè)以上 webview 同時(shí)訪問服務(wù)器,這兩個(gè) webview 之間的存儲是毫無關(guān)系的.最關(guān)鍵的是,保存登錄狀態(tài)的 sessionid 也不一樣,也就是說,在一個(gè) webview 頁面里登錄之后,另一個(gè) webview 依舊是未登錄的狀態(tài)。這就需要兩個(gè)webview公用一個(gè)WKProcesspool。需要同步的webview都要設(shè)置WKProcessPool,我是寫了一個(gè)基類,其他WKWebview頁面都繼承它。(單例的代碼我就不貼出來了)
2.在第一次加載的時(shí)候注入cookie
我在接受幾個(gè)項(xiàng)目的時(shí)候發(fā)現(xiàn)WKWebview在第一次加載請求的時(shí)候是不注入cookie的,第二次加載的時(shí)候發(fā)現(xiàn)cookie已經(jīng)注入了。這個(gè)時(shí)候我們就需要在第一次加載的時(shí)候注入cookie。
而且你需要在WKNavigationDelegate的代理方法去對cookie做一個(gè)存儲
3.在登出操作的時(shí)候清除cookie
我在做登出操作的時(shí)候,發(fā)現(xiàn)如果不對cookie做出清除,他會從NSHTTPCookieStorage取出上一次存儲的cookie來做請求。導(dǎo)致WKWebview頁面還是登陸的狀態(tài),這個(gè)時(shí)候就需要及時(shí)的去清理cookie。
以上這些操作昨晚以后我自測就沒什么問題了,寫的很差,但希望能幫助到你們一點(diǎn)點(diǎn)就好。這篇博文寫的很好,其中獲益良多,分享給大家。http://www.cnblogs.com/NSong/p/6489802.html