什么是移动版Safari的自定义URL Scheme?

33

iOS URL方案允许网站像这样启动应用程序:

  • twitter://timeline 启动Twitter
  • googlechrome://google.com 启动Chrome
  • fb://root 启动Facebook
  • ______________ 启动Safari?(不是http://,因为Safari无法从UIWebView启动)

有哪些自定义URL方案可以触发Safari启动(即使在另一个应用程序的UIWebView中)?

澄清一下,我不是在寻找 [[UIApplication sharedApplication] openURL: request.URL];

相反,我正在寻找一个网站如何允许用户从另一个应用程序的UIWebView中启动Mobile Safari的方法(例如 Google Chrome、Twitter 等)。

弹出其他应用程序的示例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。

3
唯一启动Safari的方法是使用UIApplication openURL:并传递一个http或https URL。 - rmaddy
1
这是在应用程序中使用 UIWebView。这与启动移动 Safari 相反。 - rmaddy
那是不可能的,而这也是一件好事。让用户选择浏览器。你的网站不应该强制使用某个特定的浏览器。你能解释一下为什么要强制用户从他们正在使用的应用程序切换到Safari吗? - rmaddy
1
你找到解决方法了吗?我在Facebook inApp浏览器上遇到了类似的问题,这导致我的PayPal结账出现问题... 好烦啊! - Emil Borconi
1
目前最好的解决方案是使用 x-web-search://?x-web-search://?your-keyword - gondo
显示剩余4条评论
1个回答

3

没有Safari的URL方案。但是,如果您自己编写并在HTML中使用它,您仍可以检查它。

实现UIWebViewDelegate方法webView:shouldStartLoadWithRequest:navigationType:。对于您想转到移动Safari的请求,请返回“否”。然后使用请求的URL调用UIApplication openURL

代码示例如下:

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

那么你就无法从网络上使用它了。例如,如果我想允许用户从应用内的 UIWebView 跳转到 Mobile Safari。你是否知道 UIWebView 是否支持 x-callback-url?我一直在阅读有关使用此切换不同应用程序的黑客攻击。 - Ryan
1
我不明白你的问题。这是为了从UIWebView中跳转到移动版Safari。不,我不知道x-callback-url。 - TomSwift
2
是的,上面的代码是用于在您控制的应用程序中跳出UIWebView的。但是,这对于允许用户打破框架体验的网站并不起作用(比如在Twitter的应用程序中 - 他们无法控制源代码的应用程序)。 - Ryan
@Ryan 你是否找到了这个问题的解决方法? - Mandeep Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接