NKWebView的简单使用

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值