从 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中的链接
从 Android WebView 中的链接播放 MP4 或 MP3
如何从 iPhone 应用程序的 webview 中的外部链接返回