WKWebViewの使用について
4343 ワード
背景
現在、会社の開発では、原生とhtml 5の混合開発を大いに推奨しています.これは必然的に
WKWebViewとUIWebViewの比較 WKWebViewはより多くのhtmlの特性をサポートします. が公式に発表した60 fpsまでのスクロールリフレッシュ率と内蔵ジェスチャー. は、より少ないメモリを消費します. は Safari同じJavaScriptエンジン;対照的に、
WKWebViewの基本使用
URLをロードする方法も
WKWebViewには、
WKNavigationDelegateによりブロックurlを実現し、
現在、会社の開発では、原生とhtml 5の混合開発を大いに推奨しています.これは必然的に
webview
を使用します.最初は最もよく知られているUIwebVIew
を使用していましたが、実際の開発の進展に伴い、UIWebView
のロード速度が遅く、メモリの消費も大きいことに気づきました.私は最適化方法を探し始めました.この過程で、iOS 8.0以降、アップルが公式に発表したUIWebView
の代替品:WKWebView
.WKWebViewとUIWebViewの比較
UIWebViewDelegate
とUIWebView
を14種類と3つのプロトコルに分割し、以前は多くの不便な機能が実現されていた.公式ドキュメント;WKWebView
の性能はUIWebView
よりも優れており、html
とのインタラクションをより容易にする方法を提供しているので、WKWebView
の代わりにUIWebView
を使用する必要がある.WKWebView
の基本的な使い方を見てみましょう.WKWebViewの基本使用
WKWebView
の基本的な使い方はUIWebView
とあまり変わりません.まず、ローカルhtml
リソースをロードするコードを見てみましょう.// html
self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 64, SCREENW, SCREENH-64)];
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"js-oc" ofType:@"html"];
NSString *htmlString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:filePath]];
[self.view addSubview:self.webView];
URLをロードする方法も
UIWebView
とほぼ似ていますが、Demoを見てみましょう.self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 64, SCREENW, SCREENH-64)];
NSString *urlStr = @"http://www.baidu.com";
NSURL *url = [NSURL URLWithString:urlStr];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
WKWebViewには、
WKUIDelegate
とWKNavigationDelegate
の2つのエージェントがあります.WKUIDelegate
は主にJSスクリプト、確認ボックス、警告ボックスなどを処理し、WKNavigationDelegate
は主にいくつかのジャンプ、ロード処理操作を処理する.次に、一般的なエージェントの方法を見てみましょう.#pragma mark - WKNavigationDelegate
//
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation
{
NSLog(@"webView provision to load!");
}
// , view
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation
{
NSLog(@"webView did start to load!");
}
//
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
NSLog(@"webView did finish!");
}
//
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
NSLog(@"webView did fail provision!");
}
//
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
NSLog(@"webView did fail navigation!");
}
//
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation
{
NSLog(@"webView did receive service redirect for provision!");
}
// ,
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
NSLog(@"webView decide policy for navigation action!");
NSLog(@"%@",navigationAction.request.URL.absoluteString);
NSLog(@"%ld",(long)navigationAction.navigationType);
//
decisionHandler(WKNavigationActionPolicyAllow);
//
//decisionHandler(WKNavigationActionPolicyCancel);
}
// ,
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
{
NSLog(@"webView decide policy for navigation response!");
NSLog(@"%@",navigationResponse.response.URL.absoluteString);
//
decisionHandler(WKNavigationResponsePolicyAllow);
//
// decisionHandler(WKNavigationResponsePolicyCancel);
}
WKNavigationDelegateによりブロックurlを実現し、
navigationAction.navigationType
のタイプを判断することにより、html
ページのジャンプの制御と、オリジナルページとhtml
ページとの切り替えを実現することができる.WKWebView
の簡単な実用については、まずこんなにたくさん記録して、次の文章は更に深く理解します!