ขณะนี้ฉันกำลังเปิดลิงก์ในแอปของฉันในWebView
แต่ฉันกำลังมองหาตัวเลือกเพื่อเปิดลิงก์ในSafariแทน
ขณะนี้ฉันกำลังเปิดลิงก์ในแอปของฉันในWebView
แต่ฉันกำลังมองหาตัวเลือกเพื่อเปิดลิงก์ในSafariแทน
คำตอบ:
ไม่ใช่ "อบใน Swift" แต่คุณสามารถใช้UIKit
วิธีมาตรฐานเพื่อทำ ลองดูที่ UIApplication ของ(เลิกใช้)และopenUrl(_:)
open(_:options:completionHandler:)
Swift 4 + Swift 5 (iOS 10 ขึ้นไป)
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.open(url)
Swift 3 (iOS 9 และต่ำกว่า)
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.openURL(url)
สวิฟท์ 2.2
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.sharedApplication().openURL(url)
ใหม่กับ iOS 9 และสูงกว่าคุณสามารถนำเสนอผู้ใช้ด้วยSFSafariViewController
(ดูเอกสารที่นี่ ) โดยทั่วไปคุณจะได้รับประโยชน์ทั้งหมดจากการส่งผู้ใช้ไปที่ Safari โดยไม่ทำให้พวกเขาออกจากแอปของคุณ ในการใช้ SFSafariViewController ใหม่เพียง:
import SafariServices
และบางแห่งในตัวจัดการเหตุการณ์นำเสนอผู้ใช้ด้วยตัวควบคุมมุมมองซาฟารีดังนี้:
let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
มุมมองซาฟารีจะมีลักษณะดังนี้:
sharedApplication
ห้ามเข้าถึงคุณสมบัติในส่วนขยายของแอป สำหรับข้อมูลเพิ่มเติม: developer.apple.com/library/archive/documentation/General/…
อัปเดตสำหรับ Swift 4: (เครดิตสำหรับ Marco Weber)
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.shared.openURL(requestUrl as URL)
}
หรือไปกับสไตล์ที่รวดเร็วยิ่งขึ้นโดยใช้guard
:
guard let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") else {
return
}
UIApplication.shared.openURL(requestUrl as URL)
สวิฟท์ 3:
คุณสามารถตรวจสอบ NSURL ว่าเป็นตัวเลือกโดยปริยายโดย:
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.sharedApplication().openURL(requestUrl)
}
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") { UIApplication.shared.openURL(requestUrl as URL) }
Swift 3 & IOS 10.2
UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)
Swift 3 & IOS 10.2
ตั้งแต่ iOS 10 คุณควรใช้:
guard let url = URL(string: linkUrlString) else {
return
}
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
สวิฟท์ 5
Swift 5: ตรวจสอบการใช้canOpneURL
ถ้าถูกต้องจากนั้นเปิดขึ้นมา
guard let url = URL(string: "https://iosdevcenters.blogspot.com/") else {
return
}
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
ใน Swift 1.2:
@IBAction func openLink {
let pth = "http://www.google.com"
if let url = NSURL(string: pth){
UIApplication.sharedApplication().openURL(url)
}
ใน Swift 2.0:
UIApplication.sharedApplication().openURL(NSURL(string: "http://stackoverflow.com")!)
IOS 11.2 Swift 3.1-4
let webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
guard let url = URL(string: "https://www.google.com") else { return }
webView.frame = view.bounds
webView.navigationDelegate = self
webView.load(URLRequest(url: url))
webView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
view.addSubview(webView)
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
if let url = navigationAction.request.url,
let host = url.host, !host.hasPrefix("www.google.com"),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
print(url)
print("Redirected to browser. No need to open it locally")
decisionHandler(.cancel)
} else {
print("Open it locally")
decisionHandler(.allow)
}
} else {
print("not a user click")
decisionHandler(.allow)
}
}