diff --git a/Sources/Xendit/WebViewController/AuthenticationWebviewController.swift b/Sources/Xendit/WebViewController/AuthenticationWebviewController.swift index b321dfe..149eb08 100644 --- a/Sources/Xendit/WebViewController/AuthenticationWebviewController.swift +++ b/Sources/Xendit/WebViewController/AuthenticationWebviewController.swift @@ -76,6 +76,7 @@ class AuthenticationWebViewController: UIViewController, WKScriptMessageHandler, webView = WKWebView(frame: view.frame, configuration: webConfiguration) webView.navigationDelegate = self + webView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(webView) @@ -134,4 +135,14 @@ class AuthenticationWebViewController: UIViewController, WKScriptMessageHandler, Log.shared.verbose("web auth: navigation error \(error)") authenticateCompletion(nil, XenditError(errorCode: "WEBVIEW_ERROR", message: error.localizedDescription)) } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + // Remove script message handler + webView.configuration.userContentController.removeAllUserScripts() + webView.configuration.userContentController.removeScriptMessageHandler(forName: "callbackHandler") + // Clear any other references + webView.navigationDelegate = nil + webView = nil + } } diff --git a/Sources/Xendit/WebViewController/WebViewController.swift b/Sources/Xendit/WebViewController/WebViewController.swift index c32e4a7..f411eca 100755 --- a/Sources/Xendit/WebViewController/WebViewController.swift +++ b/Sources/Xendit/WebViewController/WebViewController.swift @@ -82,6 +82,7 @@ class WebViewController: UIViewController, WKScriptMessageHandler, WKNavigationD webConfiguration.userContentController = contentController webView = WKWebView(frame: view.frame, configuration: webConfiguration) webView.navigationDelegate = self + webView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(webView) NSLayoutConstraint.activate([ @@ -139,4 +140,14 @@ class WebViewController: UIViewController, WKScriptMessageHandler, WKNavigationD Log.shared.verbose("web auth: navigation error \(error)") authenticateCompletion(nil, XenditError(errorCode: "WEBVIEW_ERROR", message: error.localizedDescription)) } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + // Remove script message handler + webView.configuration.userContentController.removeAllUserScripts() + webView.configuration.userContentController.removeScriptMessageHandler(forName: "callbackHandler") + // Clear any other references + webView.navigationDelegate = nil + webView = nil + } }