diff --git a/Mixin/UserInterface/Controllers/Common/Web/MixinWebViewController.swift b/Mixin/UserInterface/Controllers/Common/Web/MixinWebViewController.swift index a6dc15f50e..de71225cd4 100644 --- a/Mixin/UserInterface/Controllers/Common/Web/MixinWebViewController.swift +++ b/Mixin/UserInterface/Controllers/Common/Web/MixinWebViewController.swift @@ -56,6 +56,7 @@ final class MixinWebViewController: WebViewController { private let defaultEVMChain: Web3Chain = .ethereum private(set) var context: MixinWebContext! + private(set) var isMinimizable: Bool = true private lazy var messageHandler = WebViewMessageHandler(delegate: self) private lazy var suspicousLinkView = R.nib.suspiciousLinkView(withOwner: self)! @@ -276,9 +277,17 @@ extension MixinWebViewController: WKNavigationDelegate { decisionHandler(.cancel) return } + let isNavigatingOnMainFrame = navigationAction.targetFrame?.isMainFrame ?? false + isMinimizable = !isNavigatingOnMainFrame if isViewLoaded && parent != nil && (UrlWindow.checkUrl(url: url, from: .webView(context)) || UrlWindow.checkWithdrawal(string: url.absoluteString)) { + if isNavigatingOnMainFrame { + dismissAsChild(animated: true) + } decisionHandler(.cancel) - } else if "file" == url.scheme { + return + } + isMinimizable = true + if "file" == url.scheme { decisionHandler(.allow) } else if ["http", "https"].contains(url.scheme?.lowercased() ?? "") { decisionHandler(.allow) diff --git a/Mixin/UserInterface/Controllers/Home/HomeNavigationController.swift b/Mixin/UserInterface/Controllers/Home/HomeNavigationController.swift index d5695a0a70..0c0ea6fbdd 100644 --- a/Mixin/UserInterface/Controllers/Home/HomeNavigationController.swift +++ b/Mixin/UserInterface/Controllers/Home/HomeNavigationController.swift @@ -102,8 +102,8 @@ extension HomeNavigationController: UINavigationControllerDelegate { let webViewControllers = container.children.compactMap { child in child as? MixinWebViewController } - for webViewController in webViewControllers { - webViewController.minimizeWithAnimation() + for web in webViewControllers where web.isMinimizable { + web.minimizeWithAnimation() } } }