Dans la dernière version de PhoneGap, les liens externes (http:// et https://) s’ouvre dans notre application et non plus dans Safari Mobile. Cela ne serait pas un drame si l’iPhone avait un bouton de retour… Vue que ce n’est pas le cas, voici un léger hack pour contourner ce problème.
Éditer votre fichier « [Nom de votre application]AppDelegate.m » qui se trouve dans le dossier « classes ». Rendez-vous à la ligne 65 (normalement).
/** * Start Loading Request * This is where most of the magic happens... We take the request(s) and process the response. * From here we can re direct links and other protocalls to different internal methods. */ - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; }
Remplacer le code ci-dessus par celui ci dessous.
/** * Start Loading Request * This is where most of the magic happens... We take the request(s) and process the response. * From here we can re direct links and other protocalls to different internal methods. */ - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; if([[url scheme]isEqualToString:@"http"]|| [[url scheme]isEqualToString:@"https"]) { [[UIApplication sharedApplication]openURL:url]; return NO; } return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; }
En gros, on teste si dans l’url demandé il y a le schéma « http » ou « https », et dans ce cas on demande à l’iOS d’ouvrir le lien avec le navigateur web par défaut de l’iPhone.
Bonjour,
Débutant en Programmation et ne touchant qu’à la partie WWW en html et javascript
Je ne trouvais aucune solution correcte pour lever ce probleme.
Au bout de plusieurs heures de test de solution de contournement , je suis tombé sur votre site.
Félicitation et un grand merci pour cette info cruciale.
sachant qu « elle est en plus en français
Merci
Bonjour,
merci beaucoup pour cette astuce.
Maintenant, j’ai voulu m’inspirer de ton code pour un cas particulier :
en effet, je souhaite que mes http s’ouvrent bien dans l’appli elle-même
SAUF pour une certaine adresse par exemple une url qui contiendrait « TOTO »…
(genre http://monsupersite.fr/TOTO.php)
Or, Je n’arrive pas à trouver la fonction qui permet de tester l’existence d’une chaine dans une autre…
Tu n’aurais pas cela sous la main par hasard !?
Merci d’avance pour ton aide et encore merci pour ce code très intéressant.
Cordialement
Fred
Heu… non.
L’Objective C est pour moi une torture intellectuel, je te conseil d’aller plutôt faire un tour sur les sites pro Apple, eux auront la solution ou les documentations.
Merci !
NB: sur phonegap 2.6, le fichier à modifier est « MainViewController.m » qui se trouve dans le dossier « Classes »
Ajouter le bout de code après les commentaires et avant le @end bien sûr.
——————-
#pragma mark UIWebDelegate implementation
– (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
// Black base color for background matches the native apps
theWebView.backgroundColor = [UIColor blackColor];
return [super webViewDidFinishLoad:theWebView];
}
/* Comment out the block below to over-ride */
/*
– (void) webViewDidStartLoad:(UIWebView*)theWebView
{
return [super webViewDidStartLoad:theWebView];
}
– (void) webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error
{
return [super webView:theWebView didFailLoadWithError:error];
}
– (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
}
*/
– (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];
if([[url scheme]isEqualToString:@ »http »]|| [[url scheme]isEqualToString:@ »https »])
{
[[UIApplication sharedApplication]openURL:url];
return NO;
}
return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
@end
Bonjour,
Et on fait comment quand on utilise build.phonegap.com ??