PhoneGap – Ouvrir un lien externe dans Safari Mobile

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.

Tagués avec : ,
Publié dans Mobiles (Android - iPhone)
5 commentaires pour “PhoneGap – Ouvrir un lien externe dans Safari Mobile
  1. kooak dit :

    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

  2. fred dit :

    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

    • waldo2188 dit :

      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.

  3. olivier dit :

    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

  4. bernard dit :

    Bonjour,

    Et on fait comment quand on utilise build.phonegap.com ??

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*