NKWebView的简单使用
来源:互联网 发布:yii2 数据库查询缓存 编辑:程序博客网 时间:2024/05/23 20:10
#import "wkWebviewViewController.h"#import <WebKit/WebKit.h>//签两个代理@interface wkWebviewViewController ()<WKNavigationDelegate,WKUIDelegate>@property(nonatomic,strong)WKWebView *wkwebView;@end@implementation wkWebviewViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor redColor]; /* 然后从以下几个方面说下WKWebView的基本用法: 1.加载网页 2.加载的状态回调 3.新的WKUIDelegate协议 4.动态加载并运行JS代码 5.webView 执行JS代码 6.JS调用App注册过的方法 */ //WKwebview的使用 //1.首先得引用库文件,WKWebView是webKIt的,#import<WebKit/WebKit.h> //2.声明属性 //3.初始化 _wkwebView = [[WKWebView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height-64)]; _wkwebView.backgroundColor = [UIColor yellowColor]; //4.如何添加透明的网页,以前设置背景色为clearColor就可以,但WK不行 _wkwebView.opaque = YES; //5.设置代理,WKWebView有两个代理WKUIDelegate,WKNavigationDelegate,交互涉及到的主要在第二个代理方法里 //WKNavigationDelegate(加载的状态回调):用来追踪加载过程(页面开始加载、加载完成、加载失败)的方法: //6.开始加载WKWebview内容: NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.wkwebView loadRequest:request]; [self.view addSubview:self.wkwebView]; //遵循协议 self.wkwebView.navigationDelegate = self; self.wkwebView.UIDelegate = self;#pragma mark - 4.动态加载并运行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对象,初始化WKWebViewConfiguration// WKWebViewConfiguration *configa = [[WKWebViewConfiguration alloc] init];// [configa.userContentController addUserScript:script];// [self.wkwebView loadHTMLString:@"<head></head><imgea src='https://www.nsu.edu.cn/v/2014v3/img/background/3.jpg' />" baseURL:nil];#pragma mark - 5.wkwebview执行js代码 //用户调用用JS写过的代码,一般指服务端开发的 //javaScriptString是js方法名,completionHandler是异步回调block// [self.wkwebView evaluateJavaScript:@"javaScriptString " completionHandler:nil];}#pragma mark - 6.js调用APP注册过的方法//在WKWebView里面注册供JS调用的方法,是通过WKUserConttentController类下面的方法#pragma mark - 1.加载的状态回调(WKNavigationdelegate)//用来追踪加载过程(页面开始加载、加载完成、加载失败)的方法//页面开始加载时调用-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{ NSLog(@"页面开始加载");}//当内容开始返回时调用-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{ NSLog(@"内容开始返回");}//页面加载完成后调用-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ NSLog(@"页面加载完成"); //已经添加,不能再次添加// [[UIApplication sharedApplication].keyWindow addSubview:_wkwebView];}//页面加载失败时调用-(void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{ NSLog(@"页面加载失败");}#pragma mark - 2.页面跳转的代理方法//接到服务器跳转请求之后调用/*** * @param webView 实现该代理的webview * @param navigation 当前navigation */-(void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{ NSLog(@"要跳转了");}//收到响应后,决定是否跳转-(void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{ //如果响应的地址是百度,则允许跳转 if ([navigationResponse.response.URL.host.lowercaseString isEqualToString:@"www.baidu.com"]) { //允许跳转 decisionHandler(WKNavigationResponsePolicyAllow); }else{ //不允许跳转 decisionHandler(WKNavigationResponsePolicyCancel); } NSLog(@"你要跳转吗");}/** * 在发送请求之前,决定是否跳转 * * @param webView 实现该代理的webview * @param navigationAction 当前navigation * @param decisionHandler 是否调转block */-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{ //如果请求的是百度地址,则延迟5s以后跳转 if ([navigationAction.request.URL.host.lowercaseString isEqualToString:@"www.baidu.com"]) { //允许跳转 decisionHandler(WKNavigationActionPolicyAllow); }else{ //不允许跳转 decisionHandler(WKNavigationActionPolicyCancel); } NSLog(@"发送请求之前,决定是否跳转");}#pragma mark - 3.新的WKUIDelegate协议//这个协议主要用于WKWebView处理web界面的三种提示框(警告框、确认框、输入框)//下面是警告框的例子:/** * web界面中有弹出警告框时调用 * * @param webView 实现该代理的webview * @param message 警告框中的内容 * @param frame 主窗口 * @param completionHandler 警告框消失调用 */-(void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler{ message = @"警告前方高能!";}#pragma mark - 动态加载并运行js代码//图片缩放的JS代码//-(void)picZoom//{// 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对象,初始化WKWebViewConfiguration// WKWebViewConfiguration *configa = [[WKWebViewConfiguration alloc] init];// [configa.userContentController addUserScript:script];// [self.wkwebView loadHTMLString:@"<head></head><imgea src='http://www.nsu.edu.cn/v/2014v3/img/background/3.jpg' />" baseURL:nil];//}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller.}*/@end
0 0
- NKWebView的简单使用
- 简单易懂的使用
- ant的简单使用
- Log4j的简单使用
- TCPDUMP的简单使用
- IComparer的简单使用
- TreeView的简单使用
- CListCtrl的简单使用
- Rose的简单使用
- OpenSSL的简单使用
- CInternetSession的简单使用
- 标签的简单使用
- 触发器的简单使用
- nekohtml的简单使用
- FileUpload的简单使用
- JFreeChart的简单使用
- JMX的简单使用
- Vi的简单使用
- 学JavaScript过程中用到的Sublime中的技巧、插件
- iOS label自适应宽度 左端对齐 自动换行
- cordova build android遇到的问题
- SpringMVC中拦截器的使用
- osv kernel 内存初始化管理
- NKWebView的简单使用
- iOS 获取系统当前时间
- ubunbu 12.04中安装xrdp建立远程桌面
- 一个经典的单例模式(双重检查锁)
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- 程序员的六个准则
- 在 iOS 上开始创建你的虚拟现实应用
- C#委托与事件的本质区别
- 最近在处理Cocoa NSString时, 遇到一些字符编码的问题