J'ai récemment découvert que mon UIWebView s'étouffait sur les liens ITMS. Plus précisément, à partir de l'UIWebView de mon application, si je navigue vers un site tel que celui-ci et que vous cliquez sur le lien "Disponible sur l'App Store", UIWebView affiche une erreur avec "Error Domain=WebKitErrorDomain Code=101 The URL can't be shown".
Après un peu de recherche sur Google, j'ai réalisé que je devais capturer les demandes de liens vers des applications et les faire gérer par iOS. J'ai commencé par regarder si le schéma commençait par "itms" dans le champ -webView:shouldStartLoadWithRequest:navigationType:
mais a réalisé qu'il pourrait y avoir d'autres types de liens d'applications que le système peut gérer. J'ai donc trouvé ceci à la place :
- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
// Give iOS a chance to open it.
NSURL *url = [NSURL URLWithString:[error.userInfo objectForKey:@"NSErrorFailingURLStringKey"]];
if ([error.domain isEqual:@"WebKitErrorDomain"]
&& error.code == 101
&& [[UIApplication sharedApplication]canOpenURL:url])
{
[[UIApplication sharedApplication]openURL:url];
return;
}
// Normal error handling…
}
J'ai deux questions à ce sujet :
- Est-ce que c'est sain d'esprit ? Je vérifie spécifiquement le domaine d'erreur et le code d'erreur et je récupère la chaîne d'URL à partir du userInfo. Ces éléments sont-ils susceptibles d'être conservés ?
- Cela fonctionne pour le lien vers le magasin d'applications ci-dessus, mais lorsque je reviens à mon application, il semble qu'une autre demande ait échoué avec le message "Frame load interrupted". Cela ne se produit pas lorsque le système d'exploitation gère la demande à partir de
-webView:shouldStartLoadWithRequest:navigationType:
donc c'est un peu ennuyeux.
Comment vous traiter ces demandes ?