ソースを参照

introduce base webview controller, let help webview inherit from it

cyberta 4 年 前
コミット
cbba01b356

+ 3 - 53
deltachat-ios/Controller/HelpViewController.swift

@@ -1,45 +1,16 @@
 import UIKit
 import UIKit
 import WebKit
 import WebKit
 
 
-class HelpViewController: UIViewController, WKNavigationDelegate {
+class HelpViewController: WebViewViewController {
 
 
-    private lazy var webView: WKWebView = {
-        let view = WKWebView()
-        view.navigationDelegate = self
-        return view
-    }()
-
-    init() {
-        super.init(nibName: nil, bundle: nil)
-        hidesBottomBarWhenPushed = true
-    }
-
-    required init?(coder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-
-    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
-        if navigationAction.navigationType == .linkActivated {
-            if let url = navigationAction.request.url,
-                url.host != nil,
-                UIApplication.shared.canOpenURL(url) {
-                UIApplication.shared.open(url)
-                decisionHandler(.cancel)
-                return
-            }
-        }
-        decisionHandler(.allow)
-    }
-
-    // MARK: - lifecycle
     override func viewDidLoad() {
     override func viewDidLoad() {
         super.viewDidLoad()
         super.viewDidLoad()
-        view.backgroundColor = .white //DcColors.defaultBackgroundColor
+        view.backgroundColor = .white
         self.title = String.localized("menu_help")
         self.title = String.localized("menu_help")
-        setupSubviews()
     }
     }
 
 
     override func viewWillAppear(_ animated: Bool) {
     override func viewWillAppear(_ animated: Bool) {
+        super.viewWillAppear(animated)
         loadHtmlContent { [weak self] url in
         loadHtmlContent { [weak self] url in
             // return to main thread
             // return to main thread
             DispatchQueue.main.async {
             DispatchQueue.main.async {
@@ -48,27 +19,6 @@ class HelpViewController: UIViewController, WKNavigationDelegate {
         }
         }
     }
     }
 
 
-    // MARK: - setup + configuration
-    private func setupSubviews() {
-        view.addSubview(webView)
-        webView.translatesAutoresizingMaskIntoConstraints = false
-        webView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
-
-        if #available(iOS 11, *) {
-            webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
-            webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0).isActive = true
-
-            //webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
-        } else {
-            webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
-            webView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
-
-           // webView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
-        }
-        webView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
-        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
-    }
-
     private func loadHtmlContent(completionHandler: ((URL) -> Void)?) {
     private func loadHtmlContent(completionHandler: ((URL) -> Void)?) {
         // execute in background thread because file loading would blockui for a few milliseconds
         // execute in background thread because file loading would blockui for a few milliseconds
         DispatchQueue.global(qos: .background).async {
         DispatchQueue.global(qos: .background).async {

+ 55 - 0
deltachat-ios/Controller/WebViewViewController.swift

@@ -0,0 +1,55 @@
+import UIKit
+import WebKit
+
+class WebViewViewController: UIViewController, WKNavigationDelegate {
+
+    public lazy var webView: WKWebView = {
+        let preferences = WKPreferences()
+        preferences.javaScriptEnabled = false
+
+        let configuration = WKWebViewConfiguration()
+        configuration.preferences = preferences
+
+        let view = WKWebView(frame: .zero, configuration: configuration)
+        view.navigationDelegate = self
+        return view
+    }()
+
+    init() {
+        super.init(nibName: nil, bundle: nil)
+        hidesBottomBarWhenPushed = true
+    }
+
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
+        if navigationAction.navigationType == .linkActivated,
+           let url = navigationAction.request.url,
+            url.host != nil,
+            UIApplication.shared.canOpenURL(url) {
+            UIApplication.shared.open(url)
+            decisionHandler(.cancel)
+            return
+        }
+        decisionHandler(.allow)
+    }
+
+    // MARK: - lifecycle
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        setupSubviews()
+    }
+
+
+    // MARK: - setup + configuration
+    private func setupSubviews() {
+        view.addSubview(webView)
+        webView.translatesAutoresizingMaskIntoConstraints = false
+        webView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
+        webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
+        webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0).isActive = true
+        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
+    }
+}