最近遇到的問題如下:
1.iOS的網絡請求,UIWebview的HTML加載缩抡,其cookie均會由系統存儲到 NSHTTPCookieStorage 中奠宜。
2.WKWebview的cookie有其單獨的容器存儲,而且在iOS 11中放出的API中才找到。
3.由于要使用WKWebview(取代UIWebview)來獲取更好的加載體驗压真,造成只能從 NSHTTPCookieStorage中取得cookie娩嚼,向其中注入的cookie,前端獲取不到榴都。
由于暫時找不到如何處理WKWebview的cookie問題待锈,所以做出如下幾種方案
方案一:
(1)攔截所有的HTML加載請求
(2)判斷此請求頭部有沒有cookie字段漠其,假如有嘴高,便允許此請求繼續(xù),假如沒有執(zhí)行(3)和屎。
(3)取消此次請求拴驮,不允許其加載
(4)向前面獲取到的請求頭中注入cookie
(5)加載此次網絡請求,此時此請求已無效柴信,會回到第一步加載添加過頭部的請求
方案一的結果:
(1)WKWebview的HTML請求套啤,只要是能獲取到的請求,都能夠添加成功随常。
(2)遇到的問題就是:對于前端發(fā)起的網絡請求潜沦,在其通過‘document.getCookie();’獲取cookie的時候,卻有時候能夠獲取到绪氛,有時候獲取不到唆鸡。
document.getCookie();
猜測是跟WKWebview的cookie保存機制有關系。通過向請求頭注入cookie枣察,前端取得的cookie是瀏覽器中保存的争占,并非是請求頭中注入的。
方案二:
document.setCookie(cookie);
在網頁加載完成之后序目,執(zhí)行js方法(document.setCookie(cookie);),但是依然會出現第一種方案的問題臂痕,造成前段在獲取cookie(document.getCookie();)時,獲取不到猿涨。
猜測
在頁面加載完成時調用此函數握童,雖然能夠調用成功(猜想),但是并未能夠在前端需要使用的時候注入叛赚,因此造成前端使用時并未獲取到舆瘪。
方案三和四,均未驗證红伦,需要由前端的小伙伴配合驗證
方案三:
(1)移動端在加載HTML時英古,將cookie所需要保存的字段,拼接到URL后面
(2)前段通過截取URL來獲取參數并且暫時保存昙读。
www.test.a?cookie=ss
方案四:
(1)前段聲明JS函數:
function sendCookieMesaageToWKWebview() {
window.webkit.messageHandlers.ocMethodName.postMessage();
};
function WKWebviewSetCookie(cookie){
document.setCookie(cookie);
getUserInfo();
}
function getUserInfo(){
document.getCookie();
//do somtThing
//send a get request
}
(2)前段通過js(sendCookieMesaageToWKWebview)向移動端發(fā)送獲取cookie的消息;
(3)移動端在接收到上一步的消息之后召调,執(zhí)行前端js函數(function WKWebviewSetCookie(cookie));
(4)前端在接收到移動端發(fā)送來的cookie之后,進行相應的操作。
假如您有合適的方案唠叛,歡迎進行評論只嚣。