 }
 
 extension ArticleViewController: WKNavigationDelegate {
+    
+    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
+        switch navigationAction.navigationType {
+        case .reload:
+            fallthrough
+        case .other:
+            setupArticleLoadWaitGroup()
+            decisionHandler(.allow)
+        default:
+            decisionHandler(.cancel)
+        }
+    }
+    
+    @available(iOS 13.0, *)
+    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void) {
+        switch navigationAction.navigationType {
+        case .reload:
+            fallthrough
+        case .other:
+            setupArticleLoadWaitGroup()
+            decisionHandler(.allow, preferences)
+        default:
+            decisionHandler(.cancel, preferences)
+        }
+    }
+    
     func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
         articleLoadDidFail(with: error)
     }

            self?.shareIfNecessary()
            self?.articleLoadWaitGroup = nil
        }
        guard let key = article.key else {
            return
        }
        articleLoadWaitGroup?.enter()
        // async to allow the page network requests some time to go through
        DispatchQueue.main.async {

        }
    }
    
    /// Waits for the article and article summary to finish loading (or re-loading) and performs post load actions
    func setupArticleLoadWaitGroup() {
        assert(Thread.isMainThread)
        
        guard articleLoadWaitGroup == nil else {
            return
        }
        
        articleLoadWaitGroup = DispatchGroup()
        articleLoadWaitGroup?.enter() // will leave on setup complete
        articleLoadWaitGroup?.notify(queue: DispatchQueue.main) { [weak self] in
