1. 程式人生 > >iOS WKWebView使用方法

iOS WKWebView使用方法

WKWebView與UIWebView對比有哪些優點

WKWebView從iOS8才有,通過簡單的測試即可發現UIWebView佔用過多記憶體,且記憶體峰值更是誇張。WKWebView網頁載入速度也有提升,但是並不像記憶體那樣提升那麼多。下面列舉一些其它的優勢:

  1. 更多的支援HTML5的特性;

  2. 官方宣稱的高達60fps的滾動重新整理率以及內建手勢;

  3. Safari相同的JavaScript引擎,且允許JavaScript的Nitro庫載入並使用(UIWebView中限制);

  4. 將UIWebViewDelegate與UIWebView拆分成了14類與3個協議(官方文件說明);

  5. 佔用更少的記憶體,在效能、穩定性、功能方面有很大提升(最直觀的體現就是載入網頁是佔用的記憶體,模擬器載入百度與開源中國網站時,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 { // 頁面載入完成之後呼叫 }