据说UIwebview过一段时间使用,苹果审核就会打回来,要换成WKwebview;而且WKwebview支持https,打开页面有个进度条比较智能;
1,加载页面;继承封装基类YFBaseWebViewController,根据url拿到请求,加载,添加控件就行
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:self.urlStr]];
[self.wk_WebView loadRequest:request];
[self setviewPushTitle:@"扫码支付"];
[self.view addSubview:self.wk_WebView];
2,搭桥JS交互,
stringByEvaluatingJavaScriptFromString 替换成
[self.wk_WebView evaluateJavaScript:@“传进来的” completionHandler:^(NSString * _Nullable title, NSError * _Nullable error) {
descriptionStr= title;//这里是拿到的结果
}];
方法交互,这块和以前UIwebview基本一样,只是传进去的是_bridge = [WebViewJavascriptBridge bridgeForWebView:self.wk_WebView];
后来发现不能点,以为搭桥的类也要替换,后来发现是userAgent 换成wk以后获取为空了,所以还是还原了,点击事件才能监听。
- (void)setUserAgent{
UIWebView *web = [[UIWebView alloc] init];
NSString* userAgent = [web stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
DLog(@"userAgent = %@",userAgent);
NSString *ua = [NSString stringWithFormat:@"%@\\%@",
userAgent,
@"FuKaBrowser"];
DLog(@"ua = %@",ua);
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent" : ua, @"User-Agent" : ua}];
}
3,关于加载标题,基类里面支持的是人家网页title写好的那种,由于调试到一个福讯扫码的页面时候,title竟然为空,当前控制器设置了好几种title,也是被@“”覆盖掉。于是无奈,基类里面自己写了个方法,想传过去
@property(nonatomic,copy)NSString *viewPushTitle;
//set方法 这里的set后面 要和熟悉对上才行,不然报错
-(NSString *)setviewPushTitle:(NSString *)title{
_viewPushTitle=title;
return _viewPushTitle;
}
//导航栏配置 如果有就用网页的 没有就用自己传进来的 这里判断空不能用title!=nil ,控制不了空串,可以用length去判断。这点很重要。
[webView evaluateJavaScript:@"document.title" completionHandler:^(id _Nullable title, NSError * _Nullable error) {
if ([title length]>0) {
self.navigationItem.title = title;
}
else{
self.navigationItem.title = _viewPushTitle;
}
}];
//设置标题
[self setviewPushTitle:@"扫码支付"];