我在UIWebView中打开我的移动网站,但我希望在Safari的新窗口中打开到其他网站的链接。所以我有这样的代码:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"*** %@", request.URL.absoluteString);
if (![self checkURL:request.URL]) {
//open external links in Safari
if ([[UIApplication sharedApplication] canOpenURL:request.URL])
[[UIApplication sharedApplication] openURL:request.URL];
return NO;
}
return YES;
}
- (BOOL)checkURL:(NSURL *)url {
NSURLComponents *urlComp = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:YES];
if ([urlComp.host rangeOfString:@"myprojectsite.ru"].length > 0 ||
[urlComp.host isEqualToString:@"connect.mail.ru"] || //for MailRu registration
[urlComp.host isEqualToString:@"js.stripe.com"]) { //prevents opening this link by Safari
return YES;
}
return NO;
}
一切都很好但在我的网站上我有条带的javascripts,它下载脚本https://js.stripe.com/v2/channel.html?stripe_xdm_e=
的内容类型text/html
,由于它,这个脚本在新窗口中打开。我用checkURL
方法制作了黑客。但是如果我有像Stripe这样的新脚本会怎么样呢。我尝试检查navigationType
但是对于此链接,它返回UIWebViewNavigationTypeLinkClicked。我怎么能弄清楚这个问题?
答案 0 :(得分:-1)
UIWebview“shouldStartLoadWithRequest”有一个委托方法,它有一个参数Request。通过此请求,我们可以轻松获取要打开的URL。然后,一旦你有了url,你可以呈现模态的一个UIViewcontroller,其中将包含一个UIWebview并将加载该url。然后从取消按钮我们可以在完成后对这个视图控制器进行解除调用。 希望这可能有所帮助。