WKWebView实现加载网页

1.首先要导入WebKit框架;2.通过- (instancetype)initWithFrame:(CGRect)frame方法创建WKWebView;3.设置对应代理navigationDelegate和UIDelegate;4.实现对应代理方法。5.通过WKWebView的configuration属性的userContentController调用- (void)addScriptMessageHandler:(id)scriptMessageHandler name:(NSString *)name方法来添加JS调用OC的方法;

WKNavigationDelegate代理方法:常用的处理跳转加载操作的代理                                                                         在发送请求之前,决定是否跳转   - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{}       

 页面开始加载时调用 - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation  

在收到响应后,决定是否跳转:此方法必须设置对应的回调函数,否则会崩溃      - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler                      

当内容开始返回时调用- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation     

页面加载完成之后调用- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation

页面加载失败时调用- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error

WKUIDelegate代理方法:常用的主要处理JS脚本,确认框,警告框等

 创建一个新的WebView- (WKWebView*)webView:(WKWebView*)webView createWebViewWithConfiguration:(WKWebViewConfiguration*)configuration forNavigationAction:(WKNavigationAction*)navigationAction windowFeatures:(WKWindowFeatures*)windowFeatures{return[[WKWebViewalloc]init];}

 输入框- (void)webView:(WKWebView*)webView runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt defaultText:(nullableNSString*)defaultText initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(NSString* __nullableresult))completionHandler{ completionHandler(@"http");}

 确认框- (void)webView:(WKWebView*)webView runJavaScriptConfirmPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(BOOLresult))completionHandler{ completionHandler(YES);}

 警告框- (void)webView:(WKWebView*)webView runJavaScriptAlertPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(void))completionHandler{NSLog(@"%@",message); completionHandler();}

碰到问题:WKWebView需要手动添加cookie;第一次请求页面添加cookie可以在decidePolicyForNavigationAction代理方法中给请求头加上cookie;新页面中增加cookie需要在didFinishNavigation方法中给H5页面中增加对应cookie

目前只是简单认识了WKWebView;更深的问题还需要继续研究。。。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    CoderLF阅读 9,032评论 2 12
  • 公司开始让做一个新iOS项目,由于苹果的更新需要每次发版本审核,没法像服务器一样实时更新,技术部就讨论出原生+HT...
    奶茶007阅读 1,810评论 16 9
  • WKWebView是在Apple的WWDC 2014随iOS 8和OS X 10.10出来的,是为了解决UIWeb...
    zhYx_阅读 22,707评论 4 19
  • 昨夜梦里归故园,重回教室书桌前。 校园建筑当年样,英气少年均未变。 门口相逢女校花,低头不语速躲闪。 可笑老大一男...
    冀南夫子阅读 869评论 0 2
  • 本来应该先写赋格,但是忍不住想先说说前奏曲,因为我是从一首曲子里秒爱上前奏曲的——林俊杰《黑键》。这首歌刚出...
    Stephaniezry阅读 994评论 0 1