IOS-WKWebView的使用以及Cookie的处理
来源:互联网 发布:网络视频编解码器 编辑:程序博客网 时间:2024/05/21 22:43
其实和UIWebView的用法没什么区别,但是WKWebView相对于UIWebView强大了很多,内存的消耗相对少了,所提供的接口也丰富了。
WKWebView的代理方法:
WKNavigationDelegate代理的使用:
该代理提供的方法,可以用来追踪加载过程(页面开始加载、加载完成、加载失败)、决定是否执行跳转。// 页面开始加载时调用- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;// 当内容开始返回时调用- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;// 页面加载完成之后调用- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;// 页面加载失败时调用- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;
页面跳转的代理方法有三种,分为(收到跳转与决定是否跳转两种)
// 接收到服务器跳转请求之后调用- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;// 在收到响应后,决定是否跳转- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;// 在发送请求之前,决定是否跳转- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;
代理方法的展开:
#pragma mark - WKNavigationDelegate -/** * 页面开始加载时调用 * * @param webView 实现该代理的webview * @param navigation 当前navigation */- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { NSLog(@"%s", __FUNCTION__);}/** * 当内容开始返回时调用 * * @param webView 实现该代理的webview * @param navigation 当前navigation */- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation { NSLog(@"%s", __FUNCTION__);}/** * 页面加载完成之后调用 * * @param webView 实现该代理的webview * @param navigation 当前navigation */- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { self.progressView.alpha = 0; NSLog(@"%s", __FUNCTION__);}/** * 加载失败时调用 * * @param webView 实现该代理的webview * @param navigation 当前navigation * @param error 错误 */- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error { NSLog(@"%s", __FUNCTION__);}/** * 接收到服务器跳转请求之后调用 * * @param webView 实现该代理的webview * @param navigation 当前navigation */- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation { NSLog(@"%s", __FUNCTION__);}/** * 在收到响应后,决定是否跳转 * * @param webView 实现该代理的webview * @param navigationResponse 当前navigation * @param decisionHandler 是否跳转block */- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { NSString *clickUrl = [navigationResponse.response.URL absoluteString]; self.barView.addressLabel.text = clickUrl; NSLog(@"%@", navigationResponse.response.URL); decisionHandler(WKNavigationResponsePolicyAllow);}/** * 在发送请求之前,决定是否跳转 * * @param webView 实现该代理的webview * @param navigationAction 当前navigation * @param decisionHandler 是否调转block */- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { decisionHandler(WKNavigationActionPolicyAllow);}
WKUIDelegate代理的使用:
// 创建一个新的WebView- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
剩下三个代理方法全都是与界面弹出提示框相关的,针对于web界面的三种提示框(警告框、确认框、输入框)分别对应三种代理方法。下面只举了警告框的例子。
#pragma mark - WKUIDelegate/** * web界面中有弹出警告框时调用 * * @param webView 实现该代理的webview * @param message 警告框中的内容 * @param frame 主窗口 * @param completionHandler 警告框消失调用 */- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:message preferredStyle:(UIAlertControllerStyleAlert)]; UIAlertAction *trueAction = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction *action) { }]; [alertController addAction:trueAction]; [self presentViewController:alertController animated:YES completion:nil]; completionHandler(YES);}- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *))completionHandler {}
WKScriptMessageHandler代理的使用:
这个协议中包含一个必须实现的方法,这个方法是提高App与web端交互的关键,它可以直接将接收到的JS脚本转为OC或Swift对象。(当然,在UIWebView也可以通过“曲线救国”的方式与web进行交互,著名的Cordova框架就是这种机制)。
#pragma mark - WKScriptMessageHandler- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { NSLog(@"%@", message);}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}
WKWebView加载JS:
// 图片缩放的js代码NSString *js = @"var count = document.images.length;for (var i = 0; i < count; i++) {var image = document.images[i];image.style.width=320;};window.alert('找到' + count + '张图');";// 根据JS字符串初始化WKUserScript对象WKUserScript *script = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];// 根据生成的WKUserScript对象,初始化WKWebViewConfigurationWKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];[config.userContentController addUserScript:script];_webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];[_webView loadHTMLString:@""baseURL:nil];[self.view addSubview:_webView];
WKWebView的Cookie问题:
<参考链接如下几个>
WKWebView从入门到趟坑:
http://www.jianshu.com/p/90a90bd13aac
iOS开发WKWebView Cookie的读取与写入,与UIWebView的Cookie共享:
http://www.skyfox.org/ios-wkwebview-cookie-opration.html
0 0
- IOS-WKWebView的使用以及Cookie的处理
- IOS WKWebView初级使用 以及WKWebView进度条的添加
- iOS WKWebView的使用
- iOS的Cookie存取(UIWebView,WKWebView,AFNetworking)
- iOS开发 WKWebView的使用
- IOSWebView的使用以及WKWebView的使用
- iOS之WKWebview中cookie问题的解决办法
- iOS - WKWebView的新特性与使用
- 【iOS】WKWebView的新特性与使用
- iOS-WKWebView的封装
- iOS WKWebView高度自适应以及截获页面点击的url
- iOS-WKWebView特性以及与JS交互的一些事
- iOS WKWebView高度自适应以及截获页面点击的url
- WKWebView的使用心得
- WKWebView的使用
- WKWebView 的使用简介
- WKWebView 的使用简介
- 简单的使用WKWebView
- map的遍历
- 该错误的解决办法:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
- 开关中断与cpsid/cpsie指令
- 脚本 make
- strlen函数
- IOS-WKWebView的使用以及Cookie的处理
- 转载别人的面试总结,学习
- git使用问题-解决方法 备忘
- 静态库和动态库详解
- 机械键盘测试——《万历十五年》2
- 趣味取小数
- 查询数据库重复记录方法
- 两个springboot项目如何部署在同一个服务上,two spring boot applications deploy in same server
- Mysql系列(一) 简介