1. navigationDelegate

[objc] view plaincopy print?
  1. - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { // 类似UIWebView的 -webViewDidStartLoad:
  2. NSLog(@"didStartProvisionalNavigation");
  3. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  4. }
  5. - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
  6. NSLog(@"didCommitNavigation");
  7. }
  8. - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { // 类似 UIWebView 的 -webViewDidFinishLoad:
  9. NSLog(@"didFinishNavigation");
  10. [self resetControl];
  11. if (webView.title.length > 0) {
  12. self.title = webView.title;
  13. }
  14. }
  15. - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
  16. // 类似 UIWebView 的- webView:didFailLoadWithError:
  17. NSLog(@"didFailProvisionalNavigation");
  18. }
  19. - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
  20. decisionHandler(WKNavigationResponsePolicyAllow);
  21. }
  22. - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
  23. // 类似 UIWebView 的 -webView: shouldStartLoadWithRequest: navigationType:
  24. NSLog(@"4.%@",navigationAction.request);
  25. NSString *url = [navigationAction.request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  26. decisionHandler(WKNavigationActionPolicyAllow);
  27. }
  28. - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {
  29. }

2 UIDelegate

[objc] view plaincopy print?
  1. - (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
  2. // 接口的作用是打开新窗口委托
  3. [self createNewWebViewWithURL:webView.URL.absoluteString config:configuration];
  4. return currentSubView.webView;
  5. }
  6. - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)())completionHandler
  7. {    // js 里面的alert实现,如果不实现,网页的alert函数无效
  8. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message
  9. message:nil
  10. preferredStyle:UIAlertControllerStyleAlert];
  11. [alertController addAction:[UIAlertAction actionWithTitle:@"确定"
  12. style:UIAlertActionStyleCancel
  13. handler:^(UIAlertAction *action) {
  14. completionHandler();
  15. }]];
  16. [self presentViewController:alertController animated:YES completion:^{}];
  17. }
  18. - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler {
  19. //  js 里面的alert实现,如果不实现,网页的alert函数无效  ,
  20. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message
  21. message:nil
  22. preferredStyle:UIAlertControllerStyleAlert];
  23. [alertController addAction:[UIAlertAction actionWithTitle:@"确定"
  24. style:UIAlertActionStyleDefault
  25. handler:^(UIAlertAction *action) {
  26. completionHandler(YES);
  27. }]];
  28. [alertController addAction:[UIAlertAction actionWithTitle:@"取消"
  29. style:UIAlertActionStyleCancel
  30. handler:^(UIAlertAction *action){
  31. completionHandler(NO);
  32. }]];
  33. [self presentViewController:alertController animated:YES completion:^{}];
  34. }
  35. - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *))completionHandler {
  36. completionHandler(@"Client Not handler");
  37. }

3. WKWebView 执行脚本方法

[objc] view plaincopy print?
  1. - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *))completionHandler;
[objc] view plaincopy print?
  1. completionHandler 拥有两个参数,一个是返回错误,一个可以返回执行脚本后的返回值

4. WKWebView 的Cookie问题

UIWebView 中会自动保存Cookie,如果登录了一次,下次再次进入的时候,会记住登录状态

而在WKWebView中,并不会这样,WKWebView在初始化的时候有一个方法

[objc] view plaincopy print?
  1. - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration

通过这个方法,设置 configuration 让WKWebView知道登录状态,configuration 可以通过已有的Cookie进行设置,也可以通过保存上一次的configuration进行设置

参考 stackoverflow上回答:http://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303

[objc] view plaincopy print?
  1. WKWebView * webView = /*set up your webView*/
  2. NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/index.html"]];
  3. [request addValue:@"TeskCookieKey1=TeskCookieValue1;TeskCookieKey2=TeskCookieValue2;" forHTTPHeaderField:@"Cookie"];
  4. // use stringWithFormat: in the above line to inject your values programmatically
  5. [webView loadRequest:request];
[objc] view plaincopy
print?
  1. WKUserContentController* userContentController = WKUserContentController.new;
  2. WKUserScript * cookieScript = [[WKUserScript alloc]
  3. initWithSource: @"document.cookie = 'TeskCookieKey1=TeskCookieValue1';document.cookie = 'TeskCookieKey2=TeskCookieValue2';"
  4. injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
  5. // again, use stringWithFormat: in the above line to inject your values programmatically
  6. [userContentController addUserScript:cookieScript];
  7. WKWebViewConfiguration* webViewConfig = WKWebViewConfiguration.new;
  8. webViewConfig.userContentController = userContentController;
  9. WKWebView * webView = [[WKWebView alloc] initWithFrame:CGRectMake(/*set your values*/) configuration:webViewConfig];

WKWebView 的使用简介相关推荐

  1. iOS 端容器之 WKWebView 那些事

    简介: 本文主要是关于在端容器设计开发过程中,WKWebView 使用上遇到的一些问题和解决办法. 作者 | 驽良 来源 | 阿里技术公众号 一  背景 熟悉 iOS\macOS Hybrid 混合开 ...

  2. iOS WKWebView的使用以及遇到的问题

    iOS WKWebView的使用以及遇到的问题 一.WKWebView简介 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebVi ...

  3. 微信小程序开发教程||微信小程序 小程序简介||微信小程序 开始||微信小程序 小程序代码构成

    微信小程序 小程序简介 小程序简介 小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 小程序技术发展史 ​小程序并非凭空冒出来的一个概念.当微信中的 ...

  4. 小程序学习 - 01小程序简介+微信小程序基础

    小程序简介 小程序是一个全新的.轻量级的移动端应用. 起源 在小程序出现之前的移动端开发的解决方案有: Android iOS Windows Phone - 后来退出历史舞台 移动端开发发展了一段时 ...

  5. Hybrid技术简介

    Hybrid技术简介 H5+原生混合开发 混合开发技术点 总结 H5+原生混合开发 这类框架主要原理就是将APP的一部分需要动态变动的内容通过H5来实现,通过原生的网页加载控件WebView (And ...

  6. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  7. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  8. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  9. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

最新文章

  1. android adb root方法
  2. 找找 Spring Event 源码中各种设计模式的使用
  3. malloc的内存分配原理
  4. span标签style的优先级_css样式引入优先级?
  5. grep命令---Linux学习笔记
  6. java 实现excel 导出功能
  7. 微软学术搜索项目 10个版本的历程
  8. 计算机水平考试改革,浅析全国计算机等级考试改革及应对策略
  9. LeetCode#70 Climbing Stairs
  10. sql设为简单模式sql_SQL模式演练
  11. python慢的原因_为什么 Python 这么慢?
  12. apk一键脱壳工具_一键新机!强大的抹机王来了!
  13. Java计算两点间的距离
  14. PHP连接数据库——身份验证问题
  15. 直播app开发公司手把手搭建一套简单的直播系统
  16. Little_Women2.txt
  17. 荣耀v40pro+参数配置 荣耀v40pro+价格
  18. matlab中unifrnd函数用法,概率和统计的MATLAB指令
  19. github(desktop)使用教程(三) 【保姆级】{desktop tutorial repository,创建分支,编辑文件,保存修改,commit,publish to github}
  20. 单片机如何发出类似和弦的声音

热门文章

  1. C++11中= delete;的使用
  2. Google Protocol Buffers介绍
  3. cs架构嵌入bs_CS与BS架构区别、比较、及现状与趋势分析
  4. js 等待某个函数执行完_JS 函数的执行时机
  5. integer比较_傻傻分不清?Integer、new Integer() 和 int 的面试题
  6. 16 导出pcb各网络的布线长度_设计PCB流程
  7. 职校中的计算机学的是什么,职校计算机专业主要学什么课
  8. Java项目:前台预定+后台管理酒店管理系统(java+SSM+jsp+mysql+maven)
  9. 云职教课堂计算机文化基础,2020智慧职教云课堂计算机文化基础答案最新最全单元测试答案...
  10. python缩进在程序中长度统一且强制使用_Python习题纠错1