一、背景
最近有人使用“魔链”实现深度跳转功能,在应用内使用 WebView 集成 魔链JS SDK完成跳转或者直接加载短链时,点击下载无法跳转到App Store,神马原因呢?
- UIWebView:是支持打开外部引用的。
- WKWebView:去掉了打开外部引用的功能,要想打开需要手到干预,换个姿势跳转。
二、解决方案
现在 UIWebView 不能用了,那我们就直接说 WKWebView 的情况吧,主要有如下几种情况
- WKWebView 加载某个应用的 App Store 地址,无法跳转到 App Store 对应应用的下载页面
- WKWebView 加载网页后,网页内点击按钮无法跳转到 App Store
- 点击按钮加载的是 App Store 应用链接
- 点击按钮是通过 scheme 打开App Store
需要在navigationDelegate中进行拦截,用openURL手动跳转至AppStore
//导入头文件
#import <WebKit/WebKit.h>
//添加代理
@interface ViewController ()<WKNavigationDelegate>
@end
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler {
WKNavigationActionPolicy policy = WKNavigationActionPolicyAllow;
NSLog(@"url = %@",navigationAction.request.URL);
NSLog(@"host = %@",[navigationAction.request.URL host]);
NSLog(@"scheme = %@",[navigationAction.request.URL scheme]);
/*
如果是域名,判断itunes的host链接 ;
如果是scheme跳转,就判断是否是 App Store 的 scheme
*/
if([[navigationAction.request.URL host] isEqualToString:@"itunes.apple.com"] || [[navigationAction.request.URL scheme] isEqualToString:@"itms-apps"]) {
if ( [[UIApplication sharedApplication] openURL:navigationAction.request.URL]) {
policy = WKNavigationActionPolicyCancel;
NSLog(@"已跳转至App Store");
}
}
decisionHandler(policy);
}
0条评论