近期做了一個需要與Webview交互的項目,需要實現網頁上的自動登錄功能,參考了一些OC的代碼,改為Swift
首先是保存網頁Cookie的方法,建議在WebView的代理方法webViewDidFinishLoad(webView: UIWebView)中調用
保存Cookie
func saveCookies() {
獲取到當前的所有Cookie值
let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies
將所有Cookie轉為NSData格式
let data: NSData = NSKeyedArchiver.archivedDataWithRootObject(cookies!)
將轉換格式的Cookie保存
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "cookie")
}
其次是往網頁中添加自定義Cookie值的方法,可以與前端人員協商,判斷你是否是用ios瀏覽登錄等信息,作為特殊的標識來辨別,建議在加載Webview之前寫入內存的Cookie中
添加自定義Cookie
func setCookieToWeb(cookiename:String,cookievalue:String,cookieDomain:String){
創建一個參數字典
var cookieProperties = [String: AnyObject]()
設置Cookie的名稱
cookieProperties[NSHTTPCookieName] = cookiename? ??
設置Cookie名稱對應的值
cookieProperties[NSHTTPCookieValue] = cookievalue
設置Cookie的有效域名
cookieProperties[NSHTTPCookieDomain] = cookieDomain? ? ?
設置Cookie的路徑
cookieProperties[NSHTTPCookiePath] = "/"? ? ? ? // 路徑
將字典轉為Cookie
let cookies = NSHTTPCookie(properties: cookieProperties)
將Cookie的值設置到當前內存中
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookies! )
}
最后是將存儲的cookie取出,再設置到內存中
獲取保存的cookie并設置網頁cookie
func retrieveCookies() {
判斷存儲的cookie
if (NSUserDefaults.standardUserDefaults().objectForKey("cookie") != nil) {
獲取cookie
let cookiesdata = NSUserDefaults.standardUserDefaults().objectForKey("cookie") as! NSData
if cookiesdata.length > 0 {
將cookie轉為數組
let cookies: NSArray = NSKeyedUnarchiver.unarchiveObjectWithData(cookiesdata) as! NSArray
//循環將Cookie數組內的cookie添加到內存中
for cookie? in cookies {
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookie as! NSHTTPCookie)
}
}
}
}