WKWebView
来源:互联网 发布:linux 如何查看nat 编辑:程序博客网 时间:2024/06/05 20:05
#import <WebKit/WebKit.h>
@interface ViewController () <WKNavigationDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 展示webView
WKWebView *webView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view addSubview:webView];
// 加载数据
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.dianping.com/tuan/deal/5501525"]]];
// 设置代理
webView.navigationDelegate = self;
// 使用KVO监听网页加载进度 : KVO属于观察者模式的这一种,一般用来监听某个"对象"的某个"属性"是否发生了变化
/*
1.Observer : 观察者
2.forKeyPath : 要监听/观察的属性
3.options : 观察选项,设置观察的结果是得到新值还是旧值
语义 : 让当前的`ViewController`,监听`webView`的属性`estimatedProgress`新值的变化
*/
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
}
/// 实现观察结果的回调的方法 : KVO监听到变化后自动执行的回调/方法,在监听进度时,调用非常频繁的
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
// keyPath : 监听的属性; object : 观察者; change : 属性的新值和旧值(重要)
// 获取进度
// float progress = [change[@"new"] floatValue];
float progress = [change[NSKeyValueChangeNewKey] floatValue];
NSLog(@"进度 %f",progress);
}
/// 网页即将开始加载时调用的
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
// 获取拦截到的请求地址
NSString *URLString = navigationAction.request.URL.absoluteString;
NSLog(@"拦截 %@",URLString);
if ([URLString isEqualToString:@"hm://www.yaowoya.com"]) {
NSLog(@"点击了'已结束'标签");
}
// decisionHandler : 等价于 UIWebView里面的return YES/NO;
decisionHandler(WKNavigationActionPolicyAllow); // 允许加载数据
// decisionHandler(WKNavigationActionPolicyCancel); // 不允许加载数据
}
/// 网页加载结束后调用的 : JS注入地方之一
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
NSMutableString *stringM = [NSMutableString string];
// 移除导航
[stringM appendString:@"var headerTag = document.getElementsByTagName('header')[0];headerTag.parentNode.removeChild(headerTag);"];
// 移除橙色按钮
[stringM appendString:@"var fixTag = document.getElementsByClassName('footer-btn-fix')[0];fixTag.parentNode.removeChild(fixTag);"];
// 移除网页底部
[stringM appendString:@"var footerTag = document.getElementsByClassName('footer')[0];footerTag.parentNode.removeChild(footerTag);"];
// 给标签添加点击事件
[stringM appendString:@"var buytag = document.getElementsByClassName('buy-btn btn-gray')[0];buytag.onclick = function buytagClick() {window.location.href = 'hm://www.yaowoya.com'};"];
// JS注入
[webView evaluateJavaScript:stringM completionHandler:nil];
}
- WKWebView
- WKWebView
- WKWebView
- WKWebView
- WKWebView
- WKWebView
- WKWebView
- WKWebView
- WKWebView
- WKWebView
- WKWebView使用说明
- IOS WKWebView
- 【iOS】WKWebView
- WKWebView使用说明
- WkWebView进度条
- WKWebView 实例
- WKWebView使用
- iOS - WKWebView
- spark randomSplit glom函数操作详解
- Activity 启动模式
- kylin2.0之spark构建cube
- SQL SERVER 清除日志
- vim插件之MiniBufExplorer
- WKWebView
- golang数组
- [日推荐]『口红IN』女票生气了怎么哄?这里有妙招!
- 分布式计算、并行计算及集群、网格、云计算的区别
- 快速排序与冒泡排序(面试题)
- 关于TCP/IP,必知必会的十个问题
- LintCode算法题解——栅栏染色、二叉树所有路径、快乐数、Rotate Words、等价二叉树
- 巧用二重积分的积分中值定理
- Servicehot:高效数据中心运维团队有哪7个习惯