美文网首页
使用WKWebView那点事

使用WKWebView那点事

作者: Gordon_gc | 来源:发表于2020-11-03 19:45 被阅读0次

1、基础使用

1.首先导入头文件

#import <Webkit/webkit.h>

2.正常创建WKWebView

WKWebView *webview = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:webview];

3.加载网页

  • 加载网址
//由于IOS9的安全机制更高,苹果不再允许http连接和没有ssl验证的https运行。
//需在Info.plist文件添加如下代码
//App Transport Security Settings 
//Allow Arbitrary Loads 设置为YES
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.cnblogs.com/mddblog/"]];
[webview loadRequest:request];
  • 加载本地HTML页面
NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webview loadRequest:request];
  • 加载本地可被被WebKit加载的文件
NSURL *url = [NSURL fileURLWithPath:@"/Users/userName/Desktop/bigIcon.png"];
[webview loadFileURL:url allowingReadAccessToURL:url];

2、WKWebView跳转与刷新网页的一些常用方法

  • 返回上一页面可以用[webview goBack]
  • 跳转下一页面可以用[webview goForward]
  • 刷新页面可以用[webview reload][webview reloadFromOrigin]
    (reloadFromOrigin会比较网络数据是否有变化,没有变化则使用缓存,否则从新请求。
    )
  • 跳转到某个指定历史页面可以用[webview goToBackForwardListItem:webview.backForwardList.backList[0]]
    (backForwardList是webview的向前向后列表)

3、WKNavigationDelegate协议

WKNavigationDelegate协议分为两部分,第一部分是页面跳转的监听,第二部分是页面加载的监听。

3.1页面跳转的监听

//身份验证
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler{
    completionHandler(NSURLSessionAuthChallengeUseCredential,nil);
}
// 1 在发送请求之前,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    decisionHandler(WKNavigationActionPolicyAllow);
}
// 3 在收到服务器的响应头,根据response相关信息,决定是否跳转。decisionHandler必须调用,来决定是否跳转,参数WKNavigationActionPolicyCancel取消跳转,WKNavigationActionPolicyAllow允许跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
{
    decisionHandler(WKNavigationResponsePolicyAllow);
}
//4 接收到服务器跳转请求之后调用 (服务器端redirect),不一定调用
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation
{
}
//导航错误
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
}
//WKWebView终止
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView
{
}

3.2页面加载的监听

// 2 页面开始加载
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation
{
}
// 4 开始获取到网页内容时返回
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation
{
}
// 5 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
}
// 页面加载失败时调用
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation
{
}

相关文章

网友评论

      本文标题:使用WKWebView那点事

      本文链接:https://www.haomeiwen.com/subject/jsuivktx.html