现在主流的webview控件一般为UIWebView何WKWebView两种。
UIWebView是iOS8以前系统一直沿用的控件,
WKWebView是iOS8以后,苹果推出的新框架Webkit。
话不多说,直接给出两种方式点击跳转App Store的实现和问题。
一.UIWebView跳转
解决办法1:直接进行跳转
NSURL*jumpUrl =[NSURLURLWithString:@"https://itunes.apple.com/cn/app/id1234567890?mt=8"];
NSURLRequest*request = [NSURLRequestrequestWithURL:jumpUrl];
self.webView = [UIWebView new];
self.webView.delegate = self;
[self.webView loadRequest:request];
解决办法2:URL拦截,用webview的delegate方法
- (BOOL)webView:(UIWebView *)_webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
//应用内直接跳转App Store
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/cn/app/name/id1234567890?mt=8"]];
return YES;
//要想正常跳转App Store,请确保这个函数内没有对url进行拦截限制
//以下为拦截url跳转方法
NSString *requestString = [[request URL] absoluteString];
if ([requestString rangeOfString:@"http"].location != NSNotFound){
//在此做你想拦截后,自行完成的操作
return no;
}
else{
return yes;
}
二.WKWebView跳转
有人会发现:WKWebView无法跳转到APP Store下载,而UIWebView却可以,这是为何?
解决办法:需要在navigationDelegate中进行拦截,用openURL手动跳转至AppStore。
代理方法
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler{
WKNavigationActionPolicypolicy =WKNavigationActionPolicyAllow;
/* 判断itunes的host链接 */
if([[navigationAction.request.URL host] isEqualToString:@"itunes.apple.com"] &&
[[UIApplicationsharedApplication] openURL:navigationAction.request.URL]){
policy =WKNavigationActionPolicyCancel;}
decisionHandler(policy);
}
ps : WKWebView的坑还是蛮多的,后续发现继续补充,谢谢(*^__^*)
至此本文结束。