iOS WKWebView的使用
来源:互联网 发布:2016网络舆论事件 编辑:程序博客网 时间:2024/05/17 00:09
一、导入依赖库
WebKit
二、创建WebView
//1.创建配置项
WKWebViewConfiguration*configuration = [[WKWebViewConfigurationalloc]init];
//1.1设置偏好
configuration.preferences= [[WKPreferencesalloc]init];
configuration.preferences.minimumFontSize= 10;
configuration.preferences.javaScriptEnabled= YES;
//默认是不能通过JS自动打开字典的,必须通过用户交互才能打开
configuration.preferences.javaScriptCanOpenWindowsAutomatically= NO;
//1.2设置内容交互配置
configuration.userContentController= [[WKUserContentControlleralloc]init];
//1.2.1添加一个JS到Html中,这样就可以直接在JS调用我们添加的JS方法
WKUserScript*script = [[WKUserScriptalloc]initWithSource:@"function showAlert()"injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:YES];
[configuration.userContentControlleraddUserScript:script];
//2.创建WKWebView
WKWebView*browse = [[WKWebViewalloc]initWithFrame:self.view.frameconfiguration:configuration];
//2.1设置代理
browse.navigationDelegate= self;
browse.UIDelegate= self;
//2.2设置需要加载的链接
NSString*urlStr =@"";
[browse loadHTMLString:urlStrbaseURL:nil];
[self.viewaddSubview:browse];
/*
* goBack 后退
* goForward 前进
* 监听通知:loading、title、estimatedProgress动能对应为:是否正在加载中、页面的标题、页面内容加载进度
WKWebViewConfiguration*configuration = [[WKWebViewConfigurationalloc]init];
//1.1设置偏好
configuration.preferences= [[WKPreferencesalloc]init];
configuration.preferences.minimumFontSize= 10;
configuration.preferences.javaScriptEnabled= YES;
//默认是不能通过JS自动打开字典的,必须通过用户交互才能打开
configuration.preferences.javaScriptCanOpenWindowsAutomatically= NO;
//1.2设置内容交互配置
configuration.userContentController= [[WKUserContentControlleralloc]init];
//1.2.1添加一个JS到Html中,这样就可以直接在JS调用我们添加的JS方法
WKUserScript*script = [[WKUserScriptalloc]initWithSource:@"function showAlert()"injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:YES];
[configuration.userContentControlleraddUserScript:script];
//2.创建WKWebView
WKWebView*browse = [[WKWebViewalloc]initWithFrame:self.view.frameconfiguration:configuration];
//2.1设置代理
browse.navigationDelegate= self;
browse.UIDelegate= self;
//2.2设置需要加载的链接
NSString*urlStr =@"";
[browse loadHTMLString:urlStrbaseURL:nil];
[self.viewaddSubview:browse];
/*
* goBack 后退
* goForward 前进
* 监听通知:loading、title、estimatedProgress动能对应为:是否正在加载中、页面的标题、页面内容加载进度
*/
三、实现代理
#pragma mark - WKUIDelegate
#pragma mark HTML中的alert
- (void)webView:(WKWebView*)webView runJavaScriptAlertPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(void))completionHandler
{
completionHandler();
}
#pragma mark HTML中的confirm
- (void)webView:(WKWebView*)webView runJavaScriptConfirmPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(BOOL))completionHandler
{
completionHandler(YES);
}
#pragma mark HTML中的prompt
- (void)webView:(WKWebView*)webView runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt defaultText:(NSString*)defaultText initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(NSString* _Nullable))completionHandler
{
completionHandler(@"success");
}
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message
{
//在js端通过window.webkit.messageHandlers.{InjectedName}.postMessage()方法来发送消息到native,通过这个代理可以接收到消息并做相应的处理。
}
#pragma mark - WKNavigationDelegate
#pragma mark 是否允许跳转导航,如果不允许可以手动跳转[[UIApplication sharedApplication] openURL:@""];
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler
{
decisionHandler(WKNavigationActionPolicyAllow);
}
#pragma mark开始加载页面
- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(WKNavigation*)navigation
{
}
#pragma mark决定是否允许导航响应,如果不允许就不会跳转到链接的页面
- (void)webView:(WKWebView*)webView decidePolicyForNavigationResponse:(WKNavigationResponse*)navigationResponse decisionHandler:(void(^)(WKNavigationResponsePolicy))decisionHandler
{
decisionHandler(WKNavigationResponsePolicyAllow);
}
#pragma mark内容开始返回
- (void)webView:(WKWebView*)webView didCommitNavigation:(WKNavigation*)navigation
{
}
#pragma mark加载完成
- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation
{
}
#pragma mark加载失败
- (void)webView:(WKWebView*)webView didFailNavigation:(WKNavigation*)navigation withError:(NSError*)error
{
}
#pragma mark如果我们需要处理在重定向时,需要实现下面的代理方法就可以接收到
- (void)webView:(WKWebView*)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation*)navigation
{
}
#pragma mark如果我们的请求要求授权、证书等,我们需要处理下面的代理方法,以提供相应的授权处理等
- (void)webView:(WKWebView*)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge completionHandler:(void(^)(NSURLSessionAuthChallengeDisposition,NSURLCredential * _Nullable))completionHandler
{
NSURLCredential *credential = [[NSURLCredentialalloc]init];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}
#pragma mark当我们终止页面加载时,我们会可以处理下面的代理方法,如果不需要处理,则不用实现之
- (void)webViewWebContentProcessDidTerminate:(WKWebView*)webView
{
#pragma mark HTML中的alert
- (void)webView:(WKWebView*)webView runJavaScriptAlertPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(void))completionHandler
{
completionHandler();
}
#pragma mark HTML中的confirm
- (void)webView:(WKWebView*)webView runJavaScriptConfirmPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(BOOL))completionHandler
{
completionHandler(YES);
}
#pragma mark HTML中的prompt
- (void)webView:(WKWebView*)webView runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt defaultText:(NSString*)defaultText initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(NSString* _Nullable))completionHandler
{
completionHandler(@"success");
}
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message
{
//在js端通过window.webkit.messageHandlers.{InjectedName}.postMessage()方法来发送消息到native,通过这个代理可以接收到消息并做相应的处理。
}
#pragma mark - WKNavigationDelegate
#pragma mark 是否允许跳转导航,如果不允许可以手动跳转[[UIApplication sharedApplication] openURL:@""];
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler
{
decisionHandler(WKNavigationActionPolicyAllow);
}
#pragma mark开始加载页面
- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(WKNavigation*)navigation
{
}
#pragma mark决定是否允许导航响应,如果不允许就不会跳转到链接的页面
- (void)webView:(WKWebView*)webView decidePolicyForNavigationResponse:(WKNavigationResponse*)navigationResponse decisionHandler:(void(^)(WKNavigationResponsePolicy))decisionHandler
{
decisionHandler(WKNavigationResponsePolicyAllow);
}
#pragma mark内容开始返回
- (void)webView:(WKWebView*)webView didCommitNavigation:(WKNavigation*)navigation
{
}
#pragma mark加载完成
- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation
{
}
#pragma mark加载失败
- (void)webView:(WKWebView*)webView didFailNavigation:(WKNavigation*)navigation withError:(NSError*)error
{
}
#pragma mark如果我们需要处理在重定向时,需要实现下面的代理方法就可以接收到
- (void)webView:(WKWebView*)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation*)navigation
{
}
#pragma mark如果我们的请求要求授权、证书等,我们需要处理下面的代理方法,以提供相应的授权处理等
- (void)webView:(WKWebView*)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge completionHandler:(void(^)(NSURLSessionAuthChallengeDisposition,NSURLCredential * _Nullable))completionHandler
{
NSURLCredential *credential = [[NSURLCredentialalloc]init];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}
#pragma mark当我们终止页面加载时,我们会可以处理下面的代理方法,如果不需要处理,则不用实现之
- (void)webViewWebContentProcessDidTerminate:(WKWebView*)webView
{
}
1 0
- iOS WKWebView的使用
- iOS开发 WKWebView的使用
- IOS WKWebView初级使用 以及WKWebView进度条的添加
- iOS - WKWebView的新特性与使用
- 【iOS】WKWebView的新特性与使用
- iOS-WKWebView使用
- iOS-WKWebView的封装
- iOS wkwebview的基本使用与基于wkwebview的js、native 交互
- IOS-WKWebView的使用以及Cookie的处理
- WKWebView的使用心得
- WKWebView的使用
- WKWebView 的使用简介
- WKWebView 的使用简介
- 简单的使用WKWebView
- WKWebView 的使用简介
- WKWebView的详细使用
- WKWebView的使用详解
- WKWebView的使用
- win7 caffe使用笔记——draw_net.py绘制caffe网络
- node.js的http模块输出request参数
- leetcode 234. Palindrome Linked List
- 我对OFDM的理解
- 语音信号中的特征提取
- iOS WKWebView的使用
- css区分ie8/ie9/ie10/ie11 chrome firefox的代码
- [CODEVS2185]最长公共上升子序列(dp)
- 程序跨域访问
- 【腾讯Bugly干货分享】QQ电话适配iOS10 Callkit框架
- java虚拟机之java体系结构学习笔记
- 提权ms15-051源码
- IOS 自带地图开发
- sqlserver 按五分钟分组