2012-04-30 150 views
21

是否有URI方案将Mobile Safari打开到特定的URL?从WebView中的链接打开移动Safari

例如,

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

你曾经能够找到一个方法来做到这一点? –

+0

我也在寻找这个。 – CodeMilian

+0

你是否找到解决办法? –

回答

4

更新: 所以,作为的iOS 6.0.2的,还有不特定于MobileSafari(见下文)的URL方案。但是,Federico Viticci发布了一个interesting hack,可以让你从iOS版的Chrome浏览器调用Safari。它不如Chrome-to-Safari小书签功能强大,但它确实表明可以从Chrome for iOS启动MobileSafari。

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

谷歌浏览器有以下两个URI方案:googlechrome://googlechromes://(用于HTTPS),只是工作的任何其他应用程序特定的方式(如dayone://things://,或sms://)。

3

试试这个:

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

我需要链接在HTML中,而不是客户端应用程序代码。更新问题更清晰 - 抱歉西蒙! –

+1

我认为Kirk正在寻找一个特定的URL方案(类似于在5.1之前用于打开偏好的URL方案:'[NSURL URLWithString:@“prefs:root = LOCATION_SERVICES”]];')。 –

+0

@Kirk我刚刚编辑了我的答案,如果你用HTTP方案打开一个URL,它将使用移动Safari。 –

3

OK,我想我明白你问什么。

有一个类实现UIWebViewDelegate协议。实施方法

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

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

[[UIApplication sharedApplication] openURL:URLFromRequest]; 
0

您也可以使用WebKit JavaScript的桥https://github.com/marcuswestin/WebViewJavascriptBridge

这可以让你从JavaScript将消息发送到Xcode中。 我用它来从HTML页面关闭网页视图:

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

但你也可以使用此跳转到Safari或任何你想