#wkwebview
Вопрос:
Я использую WKWebView для отображения страниц справки в своем приложении. У меня есть несколько ссылок, которые чаще всего открываются в Safari при нажатии. Но все они открываются в моем приложении (внутри WKWebView).
Это то, что у меня есть:
import WebKit class FAQAnswerViewController: UIViewController, WKUIDelegate { @IBOutlet weak var webView: WKWebView! var answer = "" var style = "style.css" override func viewDidLoad() { super.viewDidLoad() webView.uiDelegate = self webView.backgroundColor = UIColor.mainColorInverse webView.scrollView.backgroundColor = UIColor.mainColorInverse webView.isOpaque = false webView.scrollView.bounces = false } override func viewWillLayoutSubviews() { if #available(iOS 13, *) { let mode = traitCollection.userInterfaceStyle if mode == .dark { style = "style-dark.css" } } answer = String(format: answer, style) let path = Bundle.main.bundlePath let url = URL(fileURLWithPath: path) webView.loadHTMLString(answer, baseURL: url } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -gt; Void) { if navigationAction.navigationType == .linkActivated { decisionHandler(.cancel) guard let url = navigationAction.request.url else { decisionHandler(.allow) return } UIApplication.shared.open(url) decisionHandler(.cancel) } } }
Комментарии:
1. Я думаю, что дополнительное
decisionHandler(.cancel)
передguard
этим не нужно и может привести к неправильному поведению. Также я думаю, что вам нужно установитьwebView.navigationDelegate = self
.