Webview Safari中的Swift Open Link
我目前正在一个Webview Safari中的Swift Open Link,webview,swift,safari,Webview,Swift,Safari,我目前正在一个网络视图中打开我应用程序中的链接,但我正在寻找一个选项,以便在Safari中打开链接。它不是“烘焙到Swift”,但你可以使用标准的UIKit方法来完成。看看UIApplication的(已弃用)和 Swift 4+Swift 5(iOS 10及以上版本) Swift 3(iOS 9及以下版本) Swift 2.2 guard let url = URL(string: "https://stackoverflow.com") else { return } UIApplicati
网络视图中打开我应用程序中的链接,但我正在寻找一个选项,以便在Safari中打开链接。它不是“烘焙到Swift”,但你可以使用标准的UIKit
方法来完成。看看UIApplication的(已弃用)和
Swift 4+Swift 5(iOS 10及以上版本)
Swift 3(iOS 9及以下版本)
Swift 2.2
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.sharedApplication().openURL(url)
UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)
为Swift 4更新:(归功于Marco Weber)
或者使用guard
,使用更多的swift风格:
guard let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") else {
return
}
UIApplication.shared.openURL(requestUrl as URL)
Swift 3:
您可以通过以下方式将NSURL隐式检查为可选:
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.sharedApplication().openURL(requestUrl)
}
在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 9及更高版本新增功能,您可以向用户提供SFSafariViewController
(请参阅文档)。基本上,您可以获得将用户发送到Safari的所有好处,而无需让他们离开您的应用程序。要使用新的SFSafariViewController,只需执行以下操作:
import SafariServices
在事件处理程序中的某个位置,向用户显示safari视图控制器,如下所示:
let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
safari视图将如下所示:
let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
Swift 3和IOS 10.2
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.sharedApplication().openURL(url)
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)
}
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)
}
}
Swift 5
斯威夫特5
if let url = URL(string: "https://www.google.com") {
UIApplication.shared.open(url)
}
Amit,不,因为它是显式完成的,正如我所解释的,如果让requestUrl=…是的,有很多方法可以做事情,就可以保证requestUrl存在。了解为什么你应该在某种情况下使用某些代码,而不是固执地说“我是对的,所以你是错的”心态。看起来你对编程还不熟悉,这是我给你的建议。阿米特:不,它不起作用,你错了。在Swift 2或1.2中。难怪requestUrl不是可选的,所以不能用!打开它!。与Mike S的方法相比,我更喜欢此方法,因为您在发送请求之前会执行nil检查。对于Swift4更新:if let requestUrl=NSURL(字符串:http://www.iSecurityPlus.com“”{UIApplication.shared.openURL(requestUrl作为URL)}
如果我们像这样添加一些购买URL,app store是否有机会?在iOS 10.0中,您现在必须添加选项和处理程序:UIApplication.shared.open(URL(字符串:)!,选项:[:],completionHandler:nil)@gabicuesta您实际上不必提供选项和completionHandler,它们默认为[:]如果设置为“默认浏览器”,则分别为nil和ios14不在Safari中打开链接“设置为其他版本,如谷歌Chrome等。但请注意,使用此版本将停止你的应用程序在iOS 9及以前版本上运行,除非你进行版本检查。这太棒了。谢谢每个想在应用程序扩展中显示Safari浏览器的人都应该使用此代码。禁止访问应用程序扩展中的sharedApplication
属性。更多信息:杰出的解决方案苹果有时会因为使用旧的openURL方法而拒绝商店中的应用程序。这现在应该是首选的解决方案。
if let url = URL(string: "https://www.google.com") {
UIApplication.shared.open(url)
}