iOS WKWebsiteDataStore

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值