Comment gérer les app Url dans une UIWebView?
J'ai récemment découvert que mon UIWebView était d'étouffement sur ITMS liens. Plus précisément, à partir de la UIWebView dans mon application, si je navigue sur un site comme cette une et cliquez "Disponible sur l'App Store" lien, UIWebView serait d'erreur avec "Erreur de Domaine=WebKitErrorDomain Code=101 L'URL ne peut pas être affichée."
Après un peu de recherche sur Google, j'ai réalisé que j'avais besoin de prendre les demandes d'application des liens et iOS de les manipuler. J'ai commencé par regarder pour voir si le système démarre avec "imt" dans -webView:shouldStartLoadWithRequest:navigationType:
, mais s'est rendu compte qu'il pourrait y avoir d'autres types d'application liens que le système peut gérer. Donc j'ai plutôt ceci:
- (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 sain? Je vais vérifier spécifiquement pour l'erreur de domaine et le code d'erreur et de récupérer l'URL de la chaîne de la userInfo. C'est que des trucs susceptibles de rester?
- Cela fonctionne pour l'mentionnées ci-dessus app store lien, mais quand je passe de mon application, il semble y avoir eu une ultérieure échec de la demande a échoué avec le "Cadre de chargement interrompu". comment puis-je me débarrasser de ça? Il n'arrive pas, quand j'ai le handle de la demande de
-webView:shouldStartLoadWithRequest:navigationType:
, donc c'est un peu ennuyeux.
Comment vous gérer de telles demandes?
Vous devez vous connecter pour publier un commentaire.
Voici ce que j'ai trouvé. Dans
webView:shouldStartLoadWithRequest:navigationType:
, j'ai demander au système d'exploitation pour gérer les non-http et non https requêtes qu'il peut, comme suit:Cela fonctionne très bien sauf pour le sanglant "Image de Chargement Interrompu erreur". J'avais pensé qu'en retournant false à partir de
webView:shouldStartLoadWithRequest:navigationType:
que la vue web ne se charge pas de la demande et, par conséquent, il n'y aurait pas d'erreurs à gérer. Mais même si je suis de retourNO
ci-dessus, j'ai encore "Image de Chargement Interrompu erreur". Pourquoi est-ce?De toute façon, je suis en supposant qu'elle ne peut être ignoré dans
-webView:didFailLoadWithError:
:Et maintenant iTunes Url fonctionner correctement, comme le font
mailto:
s et application liens.En commençant par la Théorie de code, à examiner l'URL de "imt" schéma(s) (cette méthode peut être appelée plusieurs fois en raison de redirections). Une fois que vous voyez un "imt" régime, arrêter la webView partir de chargement et d'ouvrir l'URL dans Safari. Mon WebView qui se trouve être dans un NavigationController, donc j'en ressortir qu'après l'ouverture de Safari (moins de clignoter).
Il aide si vous enregistrez votre application pour la manipulation des tms: les liens?
par exemple
http://inchoo.net/iphone-development/launching-application-via-url-scheme/
Vous pouvez commencer avec le schéma
http
mais alors unitms
de redirection, ce qui pourrait échouer si votre application n'est pas inscrit comme la manipulation de ce régime.itms
régime. Je veux savoir quand quelqu'un clique sur un lien dans une UIWebView que la vue elle-même ne peut pas gérer, puis vérifier pour voir si iOS pouvez le manipuler, et si elle le fait, ont-il le faire. Rien à faire avec si ou pas, j'ai enregistré un schéma d'URL pour mon propre application.