iOS WKWebView使用方法
阿新 • • 發佈:2018-12-15
WKWebView與UIWebView對比有哪些優點
WKWebView從iOS8才有,通過簡單的測試即可發現UIWebView佔用過多記憶體,且記憶體峰值更是誇張。WKWebView網頁載入速度也有提升,但是並不像記憶體那樣提升那麼多。下面列舉一些其它的優勢:
-
更多的支援HTML5的特性;
-
官方宣稱的高達60fps的滾動重新整理率以及內建手勢;
-
Safari相同的JavaScript引擎,且允許JavaScript的Nitro庫載入並使用(UIWebView中限制);
-
將UIWebViewDelegate與UIWebView拆分成了14類與3個協議(官方文件說明);
-
佔用更少的記憶體,在效能、穩定性、功能方面有很大提升(最直觀的體現就是載入網頁是佔用的記憶體,模擬器載入百度與開源中國網站時,WKWebView佔用23M,而UIWebView佔用85M)。
另外用的比較多的,增加載入進度屬性:estimatedProgress
WKNavigationDelegate呼叫的順序
設定代理,該代理可以用來追蹤載入過程(頁面開始載入、載入完成、載入失敗)、決定是否執行跳轉。
_webView.navigationDelegate = self;
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy) )decisionHandler {
NSString *urlStr = navigationAction.request.URL.absoluteString;
NSLog(@"傳送跳轉請求:%@",urlStr);
//在傳送請求之前,決定是否跳轉
decisionHandler(WKNavigationActionPolicyAllow);
}
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
// 頁面開始載入時呼叫
}
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation {
// 接收到伺服器跳轉請求之後呼叫
}
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *__nullable credential))completionHandler {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling ,nil);
}
//以下三個是連續呼叫
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
// 在收到響應後,決定是否跳轉和傳送請求之前那個允許配套使用
decisionHandler(WKNavigationResponsePolicyAllow);
}
- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation {
// 當內容開始返回時呼叫
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
// 頁面載入完成之後呼叫
}