WKWebView Cookie管理與資源自定義
為什麼要用WKWebview?
- 獨立程式與APP程式相互隔離,與app同時執行,效能優勢
- 網頁不用內容可以在不同網頁程式獨立執行,防止惡意網頁攻擊,更加安全
- 與Safari 同樣的 JavaScript 引擎, html 5 支援更好
- 記憶體佔用低
由於 iOS11 之前版本都存在 cookie 無法共享,網址無法攔截,資源不能自定義等問題。現在 iOS 11 來了,解決了這些問題,而且蘋果不斷對它進行優化,替代UIWebview也指日可待。
cookie 管理
什麼是cookie?
網路請求中包含一小段資料(4K限制),就是cookie,用於追蹤使用者行為。
WKHTTPCookieStore
由於 WKWebview是獨立程式的,所以,Cookies也是獨立的,雖然可以通過JS的方法來獲取cookie。但是跨站點cookie和 HTTP-only cookies卻無能為力,這個時候就需要一套類似與NSHTTPCookieStore的管理工具。iOS 11中提供了這麼一個類-WKHTTPCookieStore。
- addObserver
- removeObserver
- setCookie
- getAllCookie
- deleteCookie
demo
WKHTTPCookieStore *cookieStore = webView.configuration.websiteDataStore.httpCookieStore;
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:@{
NSHTTPCookieDomain:@".baidu.com",
NSHTTPCookieName:@"s",
NSHTTPCookieValue:@"s1",
NSHTTPCookiePath:@"/",
NSHTTPCookieSecure:[NSNumber numberWithBool:YES]
}];
[cookieStore setCookie:cookie completionHandler:^{
}];
由於cookie設定不就是一個同步的操作, 需要等待它的完成。通過這種方式可以將NSHTTPCookieStore中的cookies設定到WKHTTPCookieStore中。
過濾不需要的內容 - WKContentRuleList
請求之前,對請求內容進行過濾,只需要通過json的簡單配置即可實現。
demo
NSString *jsonString = @"[{\"trigger\": {\"url-filter\": \".*\"}, \"action\": { \"type\":\"make-https\" }}]";
[WKContentRuleListStore.defaultStore compileContentRuleListForIdentifier:@"ContentBlockRules" encodedContentRuleList:jsonString completionHandler:^(WKContentRuleList *ruleList, NSError *error) {
if (error) {
return;
}
}];
注意 encodedContentRuleList 的規則 在這裡可以找到。上面例子的規則是實現了一個將http轉換為https的請求,保證程式的安全性。
自定義資源的能力 - WKURLSchemeHandler
我們會有一些資源來源於本地,需要通過一種方式很好的處理與web之間的關係。iOS 11 提供的方法是 WKURLSchemeHandler ,通過註冊scheme,來處理本地資料,再將資料返回給web。
demo
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
[config setURLSchemeHandler:[[SchemeHandler alloc] init] forURLScheme:@"apple-local"];
NSURL *url = [NSURL URLWithString:@"apple-local://www.baidu.com"];
- (void)webView:(WKWebView *)webView startURLSchemeTask:(id <WKURLSchemeTask>)urlSchemeTask
{
UIImage *image = [UIImage imageNamed:@"photo"];
NSData *data = UIImageJPEGRepresentation(image, 1.0);
[urlSchemeTask didReceiveResponse:[[NSURLResponse alloc] initWithURL:urlSchemeTask.request.URL MIMEType:@"image/jpg" expectedContentLength:data.length textEncodingName:nil]];
[urlSchemeTask didReceiveData:data];
[urlSchemeTask didFinish];
}
- (void)webView:(WKWebView *)webView stopURLSchemeTask:(id <WKURLSchemeTask>)urlSchemeTask;
{
urlSchemeTask = nil;
}
以上是一些基本用法,上傳一個demo
相關文章
- OC WKWebView的JS與OC互動、Cookie管理WebViewJSCookie
- iOS - WKWebView CookieiOSWebViewCookie
- iOS WKWebView新增CookieiOSWebViewCookie
- WKWebView 設定CookieWebViewCookie
- VC自定義資源
- iOS UIWebView、WKWebView注入CookieiOSUIWebViewCookie
- iOS--WKWebView Cookie注入iOSWebViewCookie
- Kubernetes CRDs 自定義資源
- WKWebView的Cookie問題小記WebViewCookie
- Laravel重寫資源路由自定義URLLaravel路由
- 如何用 Kubernetes 自定義資源?
- wpf自定義控制元件新增引用資源控制元件
- UIWebview 與WKWebviewUIWebView
- BW中自定義資料來源的Delta機制
- 在VC中使用自定義資源,FindResource,LoadResource,LockResource
- Django自定義模型管理器Django模型
- 自定義的事件管理器事件
- mark 使用commons-pool實現自定義資源池
- WKWebView載入不出來圖片音訊等資源WebView音訊
- 資源管理與作業系統作業系統
- js 與WKWebView 互動JSWebView
- iOS 中UIWebView與WKWebViewiOSUIWebView
- WKWebView與JS互動WebViewJS
- 自定義佈局管理器-FormLayoutORM
- 【ASP.NET Core】自定義的配置源ASP.NET
- PopWindow:基本使用與自定義PopWindow
- Android自定義action與permission!!!Android
- FineUIMvc隨筆(4)自定義回發引數與自定義回發UIMVC
- 自定義資料型別資料型別
- 利用js裡的Dom和Date,自定義cookie的前端設定方法JSCookie前端
- OAuth2.0實戰:認證、資源服務異常自定義!OAuth
- GridView自定義列資料繫結,和自定義頒功能View
- shiro使用自定義session管理器Session
- Spring Cloud自定義引導屬性源SpringCloud
- 自定義表單系統開源是否好用?
- spark:自定義分割槽,自定義排序,spark與jdbc,廣播變數等Spark排序JDBC變數
- wkwebview離線化載入h5資源解決方案WebViewH5
- 資源管理