在iOS开发中,如果你希望在Safari浏览器中打开来自WebView的URL链接,而不是在当前的WebView中打开,你可以使用UIApplication
的openURL:
方法来实现这一功能。以下是具体的步骤和示例代码:
mailto:
、tel:
等协议链接,系统会自动在相应应用中打开。你可以使用UIWebViewDelegate
或WKNavigationDelegate
中的方法来拦截URL加载请求,并决定是在当前WebView中打开还是在外部浏览器中打开。
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: self.view.frame)
webView.navigationDelegate = self
self.view.addSubview(webView)
if let url = URL(string: "https://example.com") {
let request = URLRequest(url: url)
webView.load(request)
}
}
// MARK: - WKNavigationDelegate
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
if navigationAction.navigationType == .linkActivated {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
} else {
decisionHandler(.allow)
}
}
}
decisionHandler(.cancel)
没有被正确调用,或者URL检查逻辑有误。decisionHandler(.cancel)
,并且URL检查逻辑无误。mailto:
)?UIApplication.shared.open(url, options: [:], completionHandler: nil)
来打开这些特殊协议的链接,系统会自动处理并跳转到相应的应用。通过上述方法,你可以有效地控制WebView中的链接是在当前WebView中打开还是在Safari中打开,从而提升用户体验和应用的安全性。
领取专属 10元无门槛券
手把手带您无忧上云