From fa7797c1a24f46c283e4470a3b1c060ec8a76d3e Mon Sep 17 00:00:00 2001 From: Tung Wu Date: Fri, 1 Mar 2024 14:08:45 +0800 Subject: [PATCH 1/2] Open external browser for target="_blank" links in wkwebview ui implementation --- Sources/AGWKWebViewController.swift | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Sources/AGWKWebViewController.swift b/Sources/AGWKWebViewController.swift index 20c306f2..31a0ecb5 100644 --- a/Sources/AGWKWebViewController.swift +++ b/Sources/AGWKWebViewController.swift @@ -150,7 +150,18 @@ class AGWKWebViewController: UIViewController, WKNavigationDelegate { } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + if let navigationURL = navigationAction.request.url { + // Handle target="_blank" links + if (navigationAction.targetFrame == nil) { + if (UIApplication.shared.canOpenURL(navigationURL)) { + UIApplication.shared.open(navigationURL) { _ in + decisionHandler(.cancel) + } + return + } + } + // Handle redirect uri var parts = URLComponents(url: navigationURL, resolvingAgainstBaseURL: false) parts?.query = nil parts?.fragment = nil From 56be8d3a0dfd373d89b3e07caa29d75fedbd00b7 Mon Sep 17 00:00:00 2001 From: Tung Wu Date: Fri, 1 Mar 2024 14:12:50 +0800 Subject: [PATCH 2/2] Run make format --- Sources/AGWKWebViewController.swift | 1 - Sources/WKWebViewUIImplementation.swift | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Sources/AGWKWebViewController.swift b/Sources/AGWKWebViewController.swift index 31a0ecb5..f0fa0cdb 100644 --- a/Sources/AGWKWebViewController.swift +++ b/Sources/AGWKWebViewController.swift @@ -150,7 +150,6 @@ class AGWKWebViewController: UIViewController, WKNavigationDelegate { } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { - if let navigationURL = navigationAction.request.url { // Handle target="_blank" links if (navigationAction.targetFrame == nil) { diff --git a/Sources/WKWebViewUIImplementation.swift b/Sources/WKWebViewUIImplementation.swift index 67fdcd7e..7d8b2d21 100644 --- a/Sources/WKWebViewUIImplementation.swift +++ b/Sources/WKWebViewUIImplementation.swift @@ -2,9 +2,9 @@ import Foundation import UIKit public class WKWebViewUIImplementation: NSObject, UIImplementation, AGWKWebViewControllerPresentationContextProviding { - public var modalPresentationStyle: UIModalPresentationStyle? = nil - public var navigationBarBackgroundColor: UIColor? = nil - public var navigationBarButtonTintColor: UIColor? = nil + public var modalPresentationStyle: UIModalPresentationStyle? + public var navigationBarBackgroundColor: UIColor? + public var navigationBarButtonTintColor: UIColor? public func openAuthorizationURL(url: URL, redirectURI: URL, shareCookiesWithDeviceBrowser: Bool, completion: @escaping CompletionHandler) { let controller = AGWKWebViewController(url: url, redirectURI: redirectURI) { url, error in