use webviewmanager to resue webviews

This commit is contained in:
Satindar Dhillon
2022-03-18 16:48:14 -07:00
parent 5d58cd28bf
commit 6f7dd764dd
4 changed files with 13 additions and 11 deletions

View File

@ -4,6 +4,7 @@ import Services
import SwiftUI
import UIKit
import Utils
import Views
import WebKit
final class WebReaderViewModel: ObservableObject {
@ -48,6 +49,9 @@ struct WebReaderContainerView: View {
}
}
}
}.onDisappear {
// Clear the shared webview content when exiting
WebViewManager.shared().loadHTMLString("<html></html>", baseURL: nil)
}
}
}
@ -57,8 +61,7 @@ struct WebReader: UIViewRepresentable {
let item: FeedItem
func makeUIView(context _: Context) -> WKWebView {
print(WebReaderResources.bundleURL)
let webView = WKWebView()
let webView = WebViewManager.create()
webView.loadHTMLString(
WebReaderContent(htmlContent: htmlContent, item: item).styledContent,
baseURL: WebReaderResources.bundleURL

View File

@ -44,7 +44,6 @@ struct WebReaderContent {
</head>
<body>
<div id="root" style="\(styleString)">
<div>React App\(WebReaderResources.bundleURL)</div>
<script type="text/javascript">
function loadArticle() {
window.omnivoreArticle = {

View File

@ -15,7 +15,7 @@ enum WebViewConfigurationManager {
}
}
enum WebViewManager {
public enum WebViewManager {
public static let sharedView = create()
public static func shared() -> WebView {
sharedView

View File

@ -7,7 +7,7 @@ enum WebViewAction: String, CaseIterable {
case readingProgressUpdate
}
final class WebView: WKWebView {
public final class WebView: WKWebView {
#if os(iOS)
private var panGestureRecognizer: UIPanGestureRecognizer?
private var tapGestureRecognizer: UITapGestureRecognizer?
@ -43,7 +43,7 @@ final class WebView: WKWebView {
}
#if os(iOS)
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
guard previousTraitCollection?.userInterfaceStyle != traitCollection.userInterfaceStyle else { return }
@ -81,7 +81,7 @@ final class WebView: WKWebView {
setDefaultMenu()
}
func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) {
public func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) {
guard let messageBody = message.body as? [String: Any] else { return }
guard let actionID = messageBody["actionID"] as? String else { return }
@ -115,7 +115,7 @@ final class WebView: WKWebView {
UIMenuController.shared.menuItems = [remove, /* share, */ annotate]
}
override var canBecomeFirstResponder: Bool {
override public var canBecomeFirstResponder: Bool {
true
}
@ -123,11 +123,11 @@ final class WebView: WKWebView {
setDefaultMenu()
}
func gestureRecognizer(_: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith _: UIGestureRecognizer) -> Bool {
public func gestureRecognizer(_: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith _: UIGestureRecognizer) -> Bool {
true
}
override func canPerformAction(_ action: Selector, withSender _: Any?) -> Bool {
override public func canPerformAction(_ action: Selector, withSender _: Any?) -> Bool {
switch action {
case #selector(annotateSelection): return true
case #selector(highlightSelection): return true
@ -163,7 +163,7 @@ final class WebView: WKWebView {
hideMenu()
}
@objc override func copy(_ sender: Any?) {
@objc override public func copy(_ sender: Any?) {
super.copy(sender)
dispatchEvent("copyHighlight")
hideMenu()