Làm cách nào tôi có thể khởi chạy Safari từ ứng dụng iPhone?


127

Đây có thể là một câu hỏi khá rõ ràng, nhưng bạn có thể khởi chạy trình duyệt Safari từ ứng dụng iPhone không?

Câu trả lời:


200

nên như sau:

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

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

Điều này sẽ được tính vào việc sử dụng bộ nhớ của ứng dụng của bạn? Ngoài ra, có cách nào tốt để quay lại ứng dụng của bạn (như tính năng đăng nhập trong các trang mạng xã hội) không?
brendan

1
@enamendan dự đoán của tôi sẽ là không vì tôi cho rằng 'webview' được khởi chạy trong ứng dụng safari nên nó sẽ nằm trong quy trình đó
surtyaar

12
bản sao của câu trả lời 5/9/09 trước đó
Barett

2
@Barett: Không chính xác thực sự, bởi vì đó là câu trả lời
21/21/09

4
IMO lệnh gọi API tương tự đủ để câu trả lời này sẽ được áp dụng tốt hơn dưới dạng chỉnh sửa hoặc nhận xét về câu trả lời trước.
Barett

52

Ứng dụng UIApplication có một phương thức gọi là openURL:

thí dụ:

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

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

16

bạn có thể mở url trong safari bằng cách này:

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

4

Với iOS 10, chúng tôi có một phương pháp khác với trình xử lý hoàn thành :

Mục tiêu:

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){
}];

Nhanh:

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

2

Có lẽ ai đó có thể sử dụng phiên bản Swift:

Trong swift 2.2:

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

Và 3.0:

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

2

Trong swift 4 và 5, vì OpenURL bị khấu hao, một cách dễ dàng để làm điều đó sẽ chỉ là

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

Bạn cũng có thể sử dụng SafariServices. Một cái gì đó giống như một cửa sổ Safari trong ứng dụng của bạn.

import SafariServices

...

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

Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm giải thích giúp cải thiện chất lượng phản hồi của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
Stefan Crain

1

Trong Swift 3.0, bạn có thể sử dụng lớp này để giúp bạn giao tiếp. Những người duy trì khung đã không tán thành hoặc loại bỏ các câu trả lời trước đó.

nhập khẩu UIKit

lớp InterAppC Truyền thông {
    func openURI tĩnh (_ URI: String) {
        UIApplication. Shared.open (URL (chuỗi: URI)!, Tùy chọn: [:], hoàn thành
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.