J'ai un UIWebView très simple avec le contenu de mon ensemble d'applications. Je souhaite que tous les liens de la vue Web s'ouvrent dans Safari plutôt que dans la vue Web. Est-ce possible?
Réponses
Trop de publicités?Un commentaire rapide pour la réponse d’user306253 : attention, lorsque vous essayez de charger quelque chose dans l’UIWebView vous-même (c'est-à-dire même du code), cette méthode permettra d’éviter qu’il s’est passé.
Ce que vous pouvez faire pour empêcher cela (Merci Wade) est :
Vous pouvez également gérer les et
types.
Les autres réponses ont un problème: ils s'appuient sur l'action que vous faites et non pas sur le lien lui-même de décider de le charger dans Safari ou dans webview.
Maintenant, parfois, c'est exactement ce que vous voulez, ce qui est bien; mais d'autres fois, surtout si vous avez des liens d'ancrage dans votre page, vous voulez vraiment pour ouvrir uniquement les liens externes dans Safari, et non interne. Dans ce cas, vous devriez vérifier l' URL.host
de la propriété de votre demande.
J'utilise ce bout de code pour vérifier si j'ai un nom de domaine dans l'URL qui est analysée, ou si elle est incorporée html:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
static NSString *regexp = @"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9])[.])+([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexp];
if ([predicate evaluateWithObject:request.URL.host]) {
[[UIApplication sharedApplication] openURL:request.URL];
return NO;
} else {
return YES;
}
}
Vous pouvez bien sûr l'adapter à l'expression régulière pour s'adapter à vos besoins.