项目中直接用的WKWebView,最近有需求点击cell调到webview,然后在网页中点击下载按钮,跳转至appstore,但是没有任何反应。
起初以为是web代码的原因,但是跟web确认后发现没有问题
在WKWebView代理方法
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error;
错误信息是:
Error Domain=WebKitErrorDomain Code=102 "帧框加载已中断" UserInfo={_WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x1c0c3f020>, NSErrorFailingURLStringKey=itmss://itunes.apple.com/cn/app/*****, NSErrorFailingURLKey=itmss://itunes.apple.com/cn/app/****, NSLocalizedDescription=帧框加载已中断}
网上查阅资料,发现是WKWebView自身的问题。。。
解决方法也挺简单
在WKWebView的另一个方法:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(nonnull WKNavigationAction *)navigationAction decisionHandler:(nonnull void (^)(WKNavigationActionPolicy))decisionHandler {
WKNavigationActionPolicy policy = WKNavigationActionPolicyAllow;
/* 简单判断host,真实App代码中,需要更精确判断itunes链接 */
if([[navigationAction.request.URL host] isEqualToString:@"itunes.apple.com"] && [[UIApplication sharedApplication] openURL:navigationAction.request.URL]){
policy =WKNavigationActionPolicyCancel;
}
decisionHandler(policy);
}
OK!