web-dev-qa-db-ja.com

Mobile SafariのカスタムURLスキームとは何ですか?

iOS URLスキームにより、Webサイトは次のようなアプリを起動できます。

  • Twitter://timelineはTwitterを起動します
  • googlechrome://google.comはChromeを起動します
  • fb://rootはFacebookを起動します
  • ______________はSafariを起動しますか? (SafariはUIWebViewから起動しないため、http://ではありません)

Safariが起動するカスタムURLスキームは何ですか(別のアプリのUIWebView内からでも)。

明確にするために、私は[[UIApplication sharedApplication] openURL: request.URL];を探していません

代わりに、Webサイトで、ユーザーが別のアプリ(Google Chrome、Twitterなど)のUIWebViewからMobile Safariを起動できるようにする方法を探しています。

他のアプリを開くHTMLリンクの例:

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

私はこれらの動作しない例に似たものを探しています:

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

jsFiddle と同じ: http://jsfiddle.net/gXLjF/9/embedded/result/

IOS Google Chromeで このURL を開き、リンクを使用してSafariを開いてみてください。

28
Ryan

Safari URLスキームはありません。作成してHTMLで使用する場合は、確認できます。

UIWebViewDelegateメソッドを実装するwebView:shouldStartLoadWithRequest:navigationType:。モバイルサファリに迂回するリクエストに対して「NO」を返します。リクエストのURLでUIApplicationopenURLを呼び出します。

このようなもの:

- (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