【问题标题】:What is Mobile Safari's custom URL Scheme? [duplicate]什么是 Mobile Safari 的自定义 URL 方案? [复制]
【发布时间】:2014-05-03 17:55:45
【问题描述】:

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

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

什么自定义 url 方案触发 Safari 启动(即使在另一个应用程序的 UIWebView 中)?

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

相反,我正在寻找一个网站如何允许用户从另一个应用程序(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>

这是相同的jsFiddlehttp://jsfiddle.net/gXLjF/9/embedded/result/

尝试在 iOS 谷歌浏览器中打开 this URL 并打开带有链接的 Safari。

【问题讨论】:

  • 启动 Safari 的唯一方法是使用 UIApplication openURL: 并传递 http 或 https URL。
  • 在应用程序中使用UIWebView。这与启动移动版 Safari 正好相反。
  • 当您使用openURL时,iOS 上的所有 http URL 默认在 Mobile Safari 中打开
  • 您找到解决方案了吗?我在使用 Facebook inApp 浏览器时遇到了类似的问题,这破坏了我的 PayPal 结帐.... grrrrrrr
  • atm 最好的解决方案是使用x-web-search://?x-web-search://?your-keyword

标签: ios mobile-safari url-scheme


【解决方案1】:

没有 Safari URL 方案。如果你制作一个并在你的 html 中使用它,你可以检查它。

实现UIWebViewDelegate 方法webView:shouldStartLoadWithRequest:navigationType:。为您想要分流到移动 safari 的请求返回“NO”。使用请求的 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。你知道UIWebViews 是否支持x-callback-url?我一直在阅读有关在不同应用之间使用此切换的黑客攻击。
  • 我没有关注你的问题。这是为了将 UIWebView 拆分为 Mobile Safari。不;我不知道 x-callback-url。
  • 是的,上面的 用于在您控制的应用程序中突破 UIWebView(即您是开发人员)。但这不适用于网站允许其用户打破框架体验(假设在 Twitter 的应用程序中——他们不控制其源代码的应用程序)。
  • @Ryan 你有没有找到解决方法?
猜你喜欢
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2014-04-02
  • 2012-06-15
  • 2011-04-30
  • 2014-10-22
相关资源
最近更新 更多