如何从iPhone应用程序启动Safari?


127

这可能是一个非常明显的问题,但是您可以从iPhone应用程序启动Safari浏览器吗?

Answers:


200

应该是以下内容:

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com"];

if (![[UIApplication sharedApplication] openURL:url]) {
    NSLog(@"%@%@",@"Failed to open url:",[url description]);
}

这会算作您应用程式的记忆体使用量吗?另外,是否有一种很好的方法可以返回您的应用程序(例如社交网站中的登录功能)?
brendan'3

1
@brendan我的猜测不会是,因为我假设在Safari应用程序中启动了“ webview”,因此它属于该过程
surtyaar 2013年

12
较早的2009
Barett

2
@Barett:并非完全正确,因为这是9/21/09的答案
Bergi 2015年

4
IMO的API调用非常相似,因此可以更好地将此答案用作对先前答案的编辑或注释。
巴雷特

52

UIApplication有一个称为openURL的方法:

例:

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com"];

if (![[UIApplication sharedApplication] openURL:url]) {
  NSLog(@"%@%@",@"Failed to open url:",[url description]);
}


4

在iOS 10中,完成处理程序有一种不同的方法:

ObjectiveC:

NSDictionary *options = [NSDictionary new];
//options can be empty
NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com"];
[[UIApplication sharedApplication] openURL:url options:options completionHandler:^(BOOL success){
}];

迅速:

let url = URL(string: "http://www.stackoverflow.com")
UIApplication.shared.open(url, options: [:]) { (success) in
}

2

也许有人可以使用Swift版本:

在2.2版中:

UIApplication.sharedApplication().openURL(NSURL(string: "https://www.google.com")!)

和3.0:

UIApplication.shared().openURL(URL(string: "https://www.google.com")!)

2

在Swift 4和5中,随着OpenURL的贬值,一种简单的实现方法就是

if let url = URL(string: "https://stackoverflow.com") {
    UIApplication.shared.open(url, options: [:]) 
}

您也可以使用SafariServices。您应用中的Safari窗口之类的东西。

import SafariServices

...

if let url = URL(string: "https://stackoverflow.com") {
    let safariViewController = SFSafariViewController(url: url)        
    self.present(safariViewController, animated: true)
}

尽管此代码段可以解决问题,但包括说明有助于提高您的响应质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
Stefan Crain

1

在Swift 3.0中,您可以使用此类来帮助您进行通信。框架维护者已弃用或删除了先前的答案。

导入UIKit

InterAppCommunication类{
    静态函数openURI(_ URI:字符串){
        UIApplication.shared.open(URL(string:URI)!,选项:[:],completionHandler:{(succ:Bool)in print(“ Complete!Success?\(succ)”)})
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.