@@ -86,7 +86,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
8686 self . setPreventDeeplink ( preventDeeplink: preventDeeplink)
8787 self . initWebview ( isInspectable: isInspectable)
8888 }
89-
89+
9090 public init ( url: URL , headers: [ String : String ] , isInspectable: Bool , credentials: WKWebViewCredentials ? = nil , preventDeeplink: Bool , blankNavigationTab: Bool , enabledSafeBottomMargin: Bool , blockedHosts: [ String ] ) {
9191 super. init ( nibName: nil , bundle: nil )
9292 self . blankNavigationTab = blankNavigationTab
@@ -153,6 +153,8 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
153153
154154 internal var preShowSemaphore : DispatchSemaphore ?
155155 internal var preShowError : String ?
156+ private var isWebViewInitialized = false
157+
156158
157159 func setHeaders( headers: [ String : String ] ) {
158160 self . headers = headers
@@ -169,7 +171,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
169171 func setPreventDeeplink( preventDeeplink: Bool ) {
170172 self . preventDeeplink = preventDeeplink
171173 }
172-
174+
173175 func setBlockedHosts( blockedHosts: [ String ] ) {
174176 self . blockedHosts = blockedHosts
175177 }
@@ -393,6 +395,10 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
393395
394396 override open func viewDidDisappear( _ animated: Bool ) {
395397 super. viewDidDisappear ( animated)
398+
399+ if self . isBeingDismissed || self . isMovingFromParent {
400+ self . cleanupWebView ( )
401+ }
396402
397403 if let capacitorStatusBar = capacitorStatusBar {
398404 self . capBrowserPlugin? . bridge? . webView? . superview? . addSubview ( capacitorStatusBar)
@@ -582,18 +588,24 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
582588 }
583589
584590 open func initWebview( isInspectable: Bool = true ) {
591+ if self . isWebViewInitialized {
592+ return
593+ }
594+ self . isWebViewInitialized = true
585595 self . view. backgroundColor = UIColor . white
586596
587597 self . extendedLayoutIncludesOpaqueBars = true
588598 self . edgesForExtendedLayout = [ . bottom]
589599
590600 let webConfiguration = WKWebViewConfiguration ( )
591601 let userContentController = WKUserContentController ( )
592- userContentController. add ( self , name: " messageHandler " )
593- userContentController. add ( self , name: " preShowScriptError " )
594- userContentController. add ( self , name: " preShowScriptSuccess " )
595- userContentController. add ( self , name: " close " )
596- userContentController. add ( self , name: " magicPrint " )
602+
603+ let weakHandler = WeakScriptMessageHandler ( self )
604+ userContentController. add ( weakHandler, name: " messageHandler " )
605+ userContentController. add ( weakHandler, name: " preShowScriptError " )
606+ userContentController. add ( weakHandler, name: " preShowScriptSuccess " )
607+ userContentController. add ( weakHandler, name: " close " )
608+ userContentController. add ( weakHandler, name: " magicPrint " )
597609
598610 // Inject JavaScript to override window.print
599611 let script = WKUserScript (
@@ -1980,3 +1992,16 @@ class PassThroughView: UIView {
19801992extension WKNavigationActionPolicy {
19811993 static let preventDeeplinkActionPolicy = WKNavigationActionPolicy ( rawValue: WKNavigationActionPolicy . allow. rawValue + 2 ) !
19821994}
1995+
1996+ class WeakScriptMessageHandler : NSObject , WKScriptMessageHandler {
1997+ weak var delegate : WKScriptMessageHandler ?
1998+
1999+ init ( _ delegate: WKScriptMessageHandler ) {
2000+ self . delegate = delegate
2001+ super. init ( )
2002+ }
2003+
2004+ func userContentController( _ userContentController: WKUserContentController , didReceive message: WKScriptMessage ) {
2005+ self . delegate? . userContentController ( userContentController, didReceive: message)
2006+ }
2007+ }
0 commit comments