用WKWebView向cookie或者localStroge傳值的坑

一,首先介紹一下在mac上用safari調(diào)試ios手機的移動端頁面

第一步:打開iphone找到以下頁面,流程是:【設(shè)置】->【Safari】->【高級】->

開啟【W(wǎng)eb檢查器】 ,如圖1、圖2



第二步:打開Mac上Safari,流程是【選中Safari】->【偏好設(shè)置】->【高級】->【在菜單欄中顯示“開發(fā)”菜單】勾選,如圖3,4


第三步:用數(shù)據(jù)線將iphone和mac連接起來,在手機app上打開一個web網(wǎng)頁,在電腦的safari中按照流程執(zhí)行:【開發(fā)】->【手機名稱】->【正在調(diào)試的網(wǎng)站】如圖5,6






第四步:點擊上圖的192.168.100.116-rechargelist web頁面,出來當前頁面的資源,時間線,存儲空間等。如圖5,6


二,正式說今天遇到的問題,方法一json存不進去,方法二可以存進去

方法一:

let data = try JSONSerialization.data(withJSONObject: ["id":GlobalData.shared.logInModel.userId, "phone":GlobalData.shared.logInModel.mobile], options: .prettyPrinted)

let userJson = String(data:data, encoding: .utf8) ?? "{}"

let script = WKUserScript(source:"localStorage.setItem('wrongUserJson','\(userJson)') ;", injectionTime: .atDocumentStart, forMainFrameOnly:false)

configuration.userContentController.addUserScript(script)

userJson = "{\n? \"id\" : \"376AA08A44F613A5960BBA9708DE6E057318626B4961F35A6632E2F9140A33E60031043B73978C1344010d16\",\n? \"phone\" : \"18616655261\"\n}"

之所以userJson串是這種帶\n的格式,是因為JSONSerialization.data(withJSONObject: ["id":GlobalData.shared.logInModel.userId, "phone":GlobalData.shared.logInModel.mobile], options: .prettyPrinted)中的options是NSJSONWritingPrettyPrinted的原因,蘋果官網(wǎng)資料是這樣說的“為了使打印出來的json串格式標準一些,添加了一些空格和\n符號”,這樣的json字符串存不進去cookie和localStroge。

方法二:

let data = try JSONSerialization.data(withJSONObject:["id":GlobalData.shared.logInModel.userId ,"phone":GlobalData.shared.logInModel.mobile], options:JSONSerialization.WritingOptions(rawValue:0))

let userJson = String(data:data, encoding: .utf8) ?? "{}"

let script = WKUserScript(source:"localStorage.setItem('rightUserJson','\(userJson)') ;", injectionTime: .atDocumentStart, forMainFrameOnly:false)

configuration.userContentController.addUserScript(script)

userJson =? "{\"id\":\"376AA08A44F613A5960BBA9708DE6E057318626B4961F35A6632E2F9140A33E60031043B73978C1344010d16\",\"phone\":\"18616655261\"}"

這種格式的json字符串能存進去,如下圖

fileprivate func creatUserCookie() -> HTTPCookie? {

let data = try JSONSerialization.data(withJSONObject: ["id":GlobalData.shared.logInModel.userId, "phone":GlobalData.shared.logInModel.mobile], options:JSONSerialization.WritingOptions(rawValue:0))

let userJson = String(data: data, encoding: .utf8) ??? "{}"

let properties: [HTTPCookiePropertyKey:Any] = [

? ? ? ? ? ? HTTPCookiePropertyKey.name: "rightUserJson",

? ? ? ? ? ? HTTPCookiePropertyKey.value: userJson,

? ? ? ? ? ? HTTPCookiePropertyKey.domain: "https://www.baidu.com",

? ? ? ? ? ? HTTPCookiePropertyKey.path: "/"

? ? ? ? ]

? ? ? ? returnHTTPCookie(properties: properties)

? ? }

if let userCookie = creatUserCookie(), let cookieStr = HTTPCookie.requestHeaderFields(with: [userCookie])["Cookie"] {

? ? ? ? ? ? // 設(shè)置頁面請求的cookie

? ? ? ? ? ? request.addValue(cookieStr, forHTTPHeaderField:"Cookie")

? ? ? ? ? ? let cookieScript = WKUserScript(source:"document.cookie = '\(cookieStr)' ;", injectionTime: .atDocumentStart, forMainFrameOnly:false)

? ? ? ? ? ? configuration.userContentController.addUserScript(cookieScript)

? ? ? ? }

json字符串存cookie,也成功存進去,如下圖


寫得比較匆忙,如有錯誤請指正,謝謝。

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

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

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