web-dev-qa-db-fra.com

Qu'est-ce que le schéma d'URL personnalisé de Mobile Safari?

les schémas d'URL iOS permettent aux sites Web de lancer des applications comme ceci:

  • Twitter://timeline lance Twitter
  • googlechrome://google.com lance Chrome
  • fb://root lance Facebook
  • ______________ lance Safari? (ne pas http://, puisque Safari ne se lancera pas à partir de UIWebView)

Quel schéma d'URL personnalisé déclenche le lancement de Safari (même à partir du UIWebView d'une autre application)?

Pour clarifier, je ne cherche pas [[UIApplication sharedApplication] openURL: request.URL];

Au lieu de cela, je cherche comment un site Web peut permettre à un utilisateur de lancer Mobile Safari à partir du UIWebView d'une autre application (Google Chrome, Twitter, etc.).

Exemples de liens HTML qui ouvrent d'autres applications:

<a href="Twitter://timeline">Open Twitter</a>
<a href="googlechrome://google.com">Open site in Chrome</a>
<a href="fb://root">Open Facebook</a>

Je cherche quelque chose de similaire à ces exemples non fonctionnels:

<a href="safari://google.com">Open Safari [Doesn't work]</a>
<a href="webkit://google.com">Open Webkit [Doesn't work]</a>

Voici un jsFiddle de la même: http://jsfiddle.net/gXLjF/9/embedded/result/

Essayez d'ouvrir cette URL dans iOS Google Chrome et d'ouvrir Safari avec les liens.

28
Ryan

Il n'y a pas de schéma d'URL Safari. Si vous en créez un et l'utilisez dans votre html, vous pouvez le vérifier.

Implémentez la méthode UIWebViewDelegatewebView:shouldStartLoadWithRequest:navigationType:. Renvoyez "NON" pour les demandes que vous souhaitez envoyer au safari mobile. Appelez UIApplicationopenURL avec l'URL de la demande.

Quelque chose comme ça:

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    // all clicked links!
    if ( navigationType == UIWebViewNavigationTypeLinkClicked )
    {
        [[UIApplication sharedApplication] openURL: request.URL];
        return NO;
    }

    // or, custom URL scheme!
    if ( [request.URL.scheme isEqualToString: @"my-open-in-safari"] )
    {
        // remap back to http.  untested!
        NSURL* url = [NSURL URLWithString: [request.URL.absoluteString stringByReplacingOccurrencesOfString: @"my-open-in-safari" withString: @"http" ]];

        [[UIApplication sharedApplication] openURL: url];
        return NO;
    }

    return YES;
}
3
TomSwift