WebViewViewController.swift 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import UIKit
  2. import WebKit
  3. class WebViewViewController: UIViewController, WKNavigationDelegate {
  4. public lazy var webView: WKWebView = {
  5. let preferences = WKPreferences()
  6. preferences.javaScriptEnabled = false
  7. let configuration = WKWebViewConfiguration()
  8. configuration.preferences = preferences
  9. let view = WKWebView(frame: .zero, configuration: configuration)
  10. view.navigationDelegate = self
  11. return view
  12. }()
  13. init() {
  14. super.init(nibName: nil, bundle: nil)
  15. hidesBottomBarWhenPushed = true
  16. }
  17. required init?(coder: NSCoder) {
  18. fatalError("init(coder:) has not been implemented")
  19. }
  20. func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
  21. if navigationAction.navigationType == .linkActivated,
  22. let url = navigationAction.request.url,
  23. url.host != nil,
  24. UIApplication.shared.canOpenURL(url) {
  25. UIApplication.shared.open(url)
  26. decisionHandler(.cancel)
  27. return
  28. }
  29. decisionHandler(.allow)
  30. }
  31. // MARK: - lifecycle
  32. override func viewDidLoad() {
  33. super.viewDidLoad()
  34. setupSubviews()
  35. }
  36. // MARK: - setup + configuration
  37. private func setupSubviews() {
  38. view.addSubview(webView)
  39. webView.translatesAutoresizingMaskIntoConstraints = false
  40. webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
  41. webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
  42. webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0).isActive = true
  43. webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 0).isActive = true
  44. }
  45. }