从 WebView 中的链接打开 Mobile Safari

Posted

技术标签:

【中文标题】从 WebView 中的链接打开 Mobile Safari【英文标题】:Open Mobile Safari from a Link in a WebView 【发布时间】:2012-04-30 20:56:40 【问题描述】:

是否有将 Mobile Safari 打开到特定 URL 的 URI 方案?

例如,

<a href="safari://open_url/?url=google.com">Open Google in Safari</a>

【问题讨论】:

你有没有找到办法做到这一点? 我也在找这个。 你有办法解决这个问题吗? 【参考方案1】:

更新: 因此,从 ios 6.0.2 开始,仍然没有特定于 MobileSafari 的 URL 方案(见下文)。然而,Federico Viticci 已经发布了一个interesting hack,它将允许您从 Chrome for iOS 调用 Safari。它的功能不如 Chrome-to-Safari 小书签,但它确实表明可以从 Chrome for iOS 启动 MobileSafari。

原答案: 事实证明,您无法仅使用 URI 方案在 Safari 中打开链接。可以使用 openURL 在 Safari 中打开其他应用程序中的超链接(请参阅其他答案),但 MobileSafari 本身没有方案(如果您要使用 Chrome 或 Opera for iOS 中的超链接在 Safari 中打开链接,则需要该方案)。

Google Chrome 有以下两种 URI 方案:googlechrome://googlechromes://(用于 HTTPS),它们的工作方式与任何其他特定于应用的方案(例如 dayone://things://sms://)一样。

【讨论】:

【参考方案2】:

好的,我想我明白你的要求了。

让一个类实现UIWebViewDelegate 协议。实现方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

每当用户单击您的 web 视图中的链接时,都会调用此方法。您可以获取用户单击的 URL,以检查 request 参数。然后,您可以拦截您想在移动 Safari 中打开的任何链接,而不是在您的 webView 中打开,然后在共享应用程序上调用 -openURL:,就像在我的其他答案中一样。

[[UIApplication sharedApplication] openURL:URLFromRequest];

【讨论】:

【参考方案3】:

试试这个:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.google.com/"]];

【讨论】:

我需要链接为 html,而不是客户端应用程序代码。更新问题以更清楚 - 对不起西蒙! 我认为 Kirk 正在寻找一个特定的 URL 方案(类似于 5.1 之前用于打开首选项的 URL 方案:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];)。 @Kirk 我刚刚编辑了我的答案,如果您使用 HTTP 方案打开一个 URL,它将使用移动 safari。【参考方案4】:
window.location.replace("x-web-search://?your search here");

Safari 的 URI 方案是 - x-web-search://

这将在 Safari 浏览器中打开您的搜索。

【讨论】:

你知道这是否适用于当前版本的 iOS(例如 12.4 吗?)我在网络上看到了 x-web-search 的建议,但我怀疑这个方案可能已被弃用。【参考方案5】:

你也可以使用webkit javascript桥https://github.com/marcuswestin/WebViewJavascriptBridge

这允许您将消息从 javascript 发送到 xcode。 我用它从 html 页面关闭 webview:

self.bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView handler:^(id data, WVJBResponseCallback responseCallback) 
            NSLog(@"Received message from javascript: %@", data);
            if ([data isEqual:@"closewin!"])
                [self dismissModal];
        ];

但您也可以使用它来跳转到 safari 或任何您想要的内容

【讨论】:

以上是关于从 WebView 中的链接打开 Mobile Safari的主要内容,如果未能解决你的问题,请参考以下文章

iphone应用程序,如何从HTML未录制应用程序的webview中打开safari中的链接

从app中的Safari链接打开safari

从 Android WebView 中的链接播放 MP4 或 MP3

如何从 iPhone 应用程序的 webview 中的外部链接返回

如何从 React Native 的 WebView 组件在 Safari 中打开链接

从 webview 链接 Swift 启动 waze