
WKWebView是苹果在iOS 8之后推出的框架,关于它比webview的优势这里就不讲了。主要说一下与JS交互的问题,其实WKWebView已经内置了JS与OC的互调、传值等方法,使用起来也非常方便,下面就来细细的探讨一下以及自己遇到过的坑
首先来看下WKWebView的初始化相关设置:
一、导入相关头文件、设置相关代理和属性
二、WKWebView初始化
注意:
楼主遇到的第一个坑:如果JS给OC传值为空,必须写成: postMessage(null),如果什么都不写,方法是调不通的。
1、在viewWillAppear中配置, addScriptMessageHandler name: "这里就是JS的方法,方法名必须统一"
楼主遇到的第二个坑:配置完后必须在 viewWillDisappear 中 remove,否则会造成循环引用,导致crash
2、实现 WKScriptMessageHandler 协议
以上就是JS调OC,JS向OC传值
楼主这里举三个例子:
1: webview加载完成前,将用户信息传给js
2: webview加载完成,将相关信息传给js
3: 调用相册或相机时,将选择的请求后台接口,后台返回地址,将该地址回传给H5,H5将显示到页面上
第一个例子: webView加载完成前传值
因为 evaluateJavaScript 方法默认是在加载完成后调用,所以直接在页面开始加载中调用是传不过去的,这个时候怎么办呢? 我们可以让js端写两个方法, 第一个方法是js端开始向oc端发起信息需求的方法名,当oc端收到该方法名的时候,就去调用js端第二个获取传值的方法,把信息传递过去。
先让JS端写个方法调OC,OC实现方法后在这个方法内部给JS传值
在WKScriptMessageHandler协议中,实现该方法,然后在方法内部给JS传值
注意: 以上就是在Webview加载完成前传值,如果打印没报错,证明传参成功,如果web端没收到,让他把获取到值的方法写到页面中即可。
第二个例子: webView加载完成,传值给js
第三个例子: 传地址给js,js拿到后显示
1:拍照事件
11:将拍的照片请求上传接口,成功返回地址,并传值给H5
2: 从相册中选取照片
22:将相册中选取的照片请求上传接口,成功返回地址,并传值给H5
注意: getPhotoCallback 即为调用的方法名,后面传值格式必须为: ('') , 这里遇到了第三个坑, 如果方法名写为: 名称名称 (例如:hello getPhotoCallback),这种是调不通的,可以写成hello_getPhotoCallback的形式,一般的话最好还是定义一个完整的名称。 刚开始这个问题卡了比较久,一直调不通,在此记录一下
在 viewDidLoad 中注册进度条监听
开始加载网页
加载完成
加载失败
页面跳转失败
progressView懒加载
添加监听观察者
最后别忘记 removeObserver
Demo地址: >
开发中遇到这么个问题,就是给webView添加监听后,一直不走监听的方法,很是让人郁闷啊,就是下面的这个方法 网上找了好多试了下依然没有任何起色
[selfwebViewscrollView addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:nil];
-(void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> )change context:(void )context {
if ([keyPath isEqualToString:@"contentSize"]) {
CGSize fittingSize = [selfwebView sizeThatFits:CGSizeZero];
selfwebViewframe = CGRectMake(38, 5, kScreenWidth-38 2, fittingSizeheight);
}
}
后来实在没有办法,很偶然的把webView初始化时设置的高度改成了1,然后奇迹出现了 方法开始正常走了,原来是刚开始设置的webView的高度,大于了webView内容的高度,导致kvo监听不到高度变化,那自然方法也不会走了。特此记下此坑谨防在被坑到
if #available(iOS 110, ) {
webViewscrollViewcontentInsetAdjustmentBehavior = never
}else{
// Fallback on earlier versions
}
以上就是关于iOS WKWebView与H5交互,JS调OC传值、OC调JS传值、进度条加载等(干货满满)全部的内容,包括:iOS WKWebView与H5交互,JS调OC传值、OC调JS传值、进度条加载等(干货满满)、WKWebView 底部视图显示不全、iOS kvo监听不到webView的高度变化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)