image.png image.png最近项目里面有个需求,点击web页面上的
查看详情结果
按钮,通过拦截URL的方式,截取URL中的关键字符串,作为get_normstar
接口的参数,通过获取到get_normstar
接口中返回的h5url
,实现跳转到测评结果
控制器,然后在这个控制器里面通过h5url
加载web页面
window.location.href="objc://"+":/"+str1+":/"+str2;
设置了拦截,但是发生了崩溃,崩溃代码如下
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{// 类似 UIWebView 的 -webView: shouldStartLoadWithRequest: navigationType:
NSURL *URL = navigationAction.request.URL;
NSString * urlStr = [[URL absoluteString] stringByRemovingPercentEncoding];
if([urlStr rangeOfString:@"http://www.yimiaozhaopin.com"].location !=NSNotFound){
NSLog(@"yes");
NSArray *arr = [urlStr componentsSeparatedByString:@"="];
self.result_Str = arr[1];
NSLog(@"哈哈哈哈%@",self.result_Str);
self.waitMB = [HemaFunction openHUD:@"请稍后"];
[self requestSeeResult:self.result_Str];
return;
}
decisionHandler(WKNavigationActionPolicyAllow); // 必须实现 加载
return;
}
解决办法
在第一个return前面加上decisionHandler(WKNavigationActionPolicyCancel);
这段能代码。
解释:不调用decisionHandler这个block,会导致app 崩溃。另外,参数是个枚举类型,WKNavigationActionPolicyCancel代表取消加载,相当于UIWebView的代理方法return NO的情况;WKNavigationActionPolicyAllow代表允许加载,相当于UIWebView的代理方法中 return YES的情况。
正确并且完整的代码如下
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{// 类似 UIWebView 的 -webView: shouldStartLoadWithRequest: navigationType:
NSURL *URL = navigationAction.request.URL;
NSString * urlStr = [[URL absoluteString] stringByRemovingPercentEncoding];
if([urlStr rangeOfString:@"http://www.yimiaozhaopin.com"].location !=NSNotFound){
NSLog(@"yes");
NSArray *arr = [urlStr componentsSeparatedByString:@"="];
self.result_Str = arr[1];
NSLog(@"哈哈哈哈%@",self.result_Str);
self.waitMB = [HemaFunction openHUD:@"请稍后"];
// 获取字符串,并请求数据
[self requestSeeResult:self.result_Str];
// 取消加载。取消点击`查看详情结果`按钮的数据加载,做自己想要做的操作
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
decisionHandler(WKNavigationActionPolicyAllow); // 必须实现 加载
return;
}
// 查看答题结果
-(void)requestSeeResult:(NSString *)result_Str{
NSLog(@"网络请求");
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:result_Str forKey:@"uuid"];
// self.waitMB = [HemaFunction openHUD:@"正在调起分享界面"];
// 使主线程的操作延迟三秒执行
[NSThread sleepForTimeInterval:3];
[ZBRequest requestWithURL:[NSString stringWithFormat:@"%@%@",REQUEST_MAINLINK,@"get_normstar"] target:self selector:@selector(responseSaveBillOperate:) parameter:dic];
}
- (void)responseSaveBillOperate:(NSDictionary*)info{
if (self.waitMB){
[ZBFunction closeHUD:self.waitMB]; self.waitMB=nil;
}
if(1 == [[info objectForKey:@"success"] intValue]){
// 通过h5url,跳转测评结果控制器,然后在测评结果控制器中加载web页面
AS_ZBPersonnelAssessmentResult *vc = [[AS_ZBPersonnelAssessmentResult alloc]init];
vc.h5URL = [[info objectForKey:@"infor"][0] objectForKey:@"h5url"];
[self.navigationController pushViewController:vc animated:YES];
}else{
[HemaFunction openIntervalHUD:[info objectForKey:@"msg"]];
}
}
网友评论