iOS开发——WKWebView的常用功能

本文详细介绍了WKWebView的使用,包括利用KVO监听标题和加载进度,实现原生与HTML5的双向交互,自定义userAgent,拦截页面跳转以及处理第三方链接的打开策略。

1、KVO,可监听标题、加载进度、网络地址

//1 添加KVO
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];//进度
[webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];//标题
[webView addObserver:self forKeyPath:@"URL" options:NSKeyValueObservingOptionNew context:NULL];//网址


//2 实现
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"estimatedProgress"]) {
        //加载进度值
        //webView.estimatedProgress
    }else if ([keyPath isEqualToString:@"title"]) {
        //网页title
        //webView.title
    }else if ([keyPath isEqualToString:@"URL"]) {
       //网页地址
        NSString *urlString = self.webView.URL.absoluteString;
        NSURL *url = [NSURL URLWithString:urlString];
        }
    }else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

2、原生与h5交互-h5主动调用

//1 注册方法
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
config.userContentController = [[WKUserContentController alloc] init];
[config.userContentController addScriptMessageHandler:self name:@"方法名"];

//2 实现
- (void)userContentController:(nonnull WKUserContentController *)userContentController didReceiveScriptMessage:(nonnull WKScriptMessage *)message{
	NSString *messageName = message.name;//方法名
    NSString *messageBody = message.body;//参数
    NSLog(@"messageName=%@ : messageBody=%@",messageName, messageBody);
    if ([messageName isEqualToString:@""]) {
        
    }
}

3、原生与h5交互-原生主动调用

// share方法名  a参数
[webView evaluateJavaScript:@"share(a)" completionHandler:^(id _Nullable, NSError * _Nullable error) {
    //调用后的回调
}];

4、设置userAgent

if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0)) {
   [webView setCustomUserAgent:@"你的userAgent"];
} else {
   [webView setValue:@"你的userAgent" forKey:@"applicationNameForUserAgent"];
}

5、拦截跳转

//1 设置代理
webView.navigationDelegate = self;


//2 代理方法
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

    NSLog(@"navigationAction = %@, request = %@",navigationAction,navigationAction.request.URL);

    if ([navigationAction.request.URL.scheme containsString:@"http"]) {
        decisionHandler(WKNavigationActionPolicyCancel);//禁止跳转,执行自己的操作
    } else {
        decisionHandler(WKNavigationActionPolicyAllow);//允许跳转
    }
}

6、在自己的webview里面,跳转第三方的链接

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
    if (!navigationAction.targetFrame.isMainFrame) {//打开第三方网页
        [webView loadRequest:navigationAction.request];
    }
    return nil;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值