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
原创粉丝点击