iOS WKWebsiteDataStore
文章目录
一、WKWebsiteDataStore是什么?
iOS 9.0+ WKWebsiteDataStore表示选中网站的各种类型的数据,数据类型包括cookies, disk and memory caches, and persistent data such as WebSQL, IndexedDB databases, and local storage。
二、属性方法
1. 库
import WebKit
2.1 WKWebsiteDataStore
// 类方法 获取默认的WKWebsiteDataStore对象
class func `default`() -> WKWebsiteDataStore
// 类方法 获取一个非持久的WKWebsiteDataStore对象
// 如果WKwebView关联了一个非持久的DataStore对象,则不会有任何数据写在系统文件
// 这对于在WebView中实现“私人浏览”很有用
class func nonPersistent() -> WKWebsiteDataStore
// 当前dataStore对象是否是持久的
var isPersistent: Bool
// 获取当前网站数据存储中包含HTTP cookie的cookie存储 iOS 11.0+
var httpCookieStore: WKHTTPCookieStore
**************检索特定类型的数据**************
// 获取包含给定网站数据类型的数据记录
// dataTypes: 指定数据类型
// completionHandler:检索回调
func fetchDataRecords(ofTypes dataTypes: Set<String>, completionHandler: ([WKWebsiteDataRecord]) -> Void)
// 返回所有可用的数据类型的集合
class func allWebsiteDataTypes() -> Set<String>
**************移除特定类型的数据**************
// 从给定的数据记录中移除指定的数据类型。
func removeData(ofTypes: Set<String>, for: [WKWebsiteDataRecord], completionHandler: () -> Void)
// 如果从指定的时间以来数据更改,则删除指定的类型的数据
func removeData(ofTypes: Set<String>, modifiedSince: Date, completionHandler: () -> Void)
2.2 WKHTTPCookieStore iOS 11.0+
管理与特定WKWebsiteDataStore关联的HTTP cookie的对象。
// 获取所有存储的cookie
func getAllCookies(([HTTPCookie]) -> Void)
// 设置一个cookie
func setCookie(HTTPCookie, completionHandler: (() -> Void)?)
// 删除指定的cookie
func delete(HTTPCookie, completionHandler: (() -> Void)?)
// 添加观察者 监听Cookie存储更改
// CookieStore不会维护观察者的强引用,你需要手动移除
func add(WKHTTPCookieStoreObserver)
// 移除观察者
func remove(WKHTTPCookieStoreObserver)
2.3 WKHTTPCookieStoreObserver iOS 11.0+
用来监听WKHTTPCookieStore的变化。
Demo
class ViewController: UIViewController, WKHTTPCookieStoreObserver {
override func loadView() {
super.loadView()
// 添加观察者
WKWebsiteDataStore.default().httpCookieStore.add(self)
addCookie()
}
func addCookie() {
var properties = [HTTPCookiePropertyKey: Any]()
properties[.name] = "username"
properties[.value] = "my test cookie"
properties[.domain] = "localhost"
properties[.originURL] = "localhost"
properties[.path] = "/"
properties[.version] = "1.0"
properties[.port] = 8080
properties[.expires] = Date(timeIntervalSinceNow: 60*60)
properties[.discard] = 0 //一个布尔值,表示cookie是否应该在会话结束的时候被丢弃(不管过期日期);
let cookie = HTTPCookie.init(properties: properties)
WKWebsiteDataStore.default().httpCookieStore.setCookie(cookie!, completionHandler: nil)
}
// 监听方法
func cookiesDidChange(in cookieStore: WKHTTPCookieStore) {
cookieStore.getAllCookies { (cookies) in
for cookie in cookies {
print(cookie.name)
}
}
}
}
总结
本文主要介绍了WKWebsiteDataStore、WKHTTPCookieStore、WKHTTPCookieStoreObserver的属性方法,并举例监听WKHTTPCookieStore。