diff --git a/Marks/Views/BrowserView.swift b/Marks/Views/BrowserView.swift index ab7ae2a..7671805 100644 --- a/Marks/Views/BrowserView.swift +++ b/Marks/Views/BrowserView.swift @@ -28,7 +28,7 @@ enum ReadingProgress { // MARK: - BrowserState @Observable -final class BrowserState: NSObject, WKNavigationDelegate { +final class BrowserState: NSObject, WKNavigationDelegate, WKUIDelegate { let webView: WKWebView var isLoading = false var canGoBack = false @@ -56,6 +56,7 @@ final class BrowserState: NSObject, WKNavigationDelegate { scrollHandler = handler webView.configuration.userContentController.add(handler, name: "scrollProgress") webView.navigationDelegate = self + webView.uiDelegate = self webView.load(URLRequest(url: url)) } @@ -94,6 +95,15 @@ final class BrowserState: NSObject, WKNavigationDelegate { func webView(_: WKWebView, didFail _: WKNavigation!, withError _: Error) { isLoading = false } func webView(_: WKWebView, didFailProvisionalNavigation _: WKNavigation!, withError _: Error) { isLoading = false } + // target="_blank" and window.open() — load in the same webview instead of opening Safari + func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, + for action: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { + if let url = action.request.url { + webView.load(URLRequest(url: url)) + } + return nil + } + func enterReaderMode(completion: @escaping () -> Void) { webView.evaluateJavaScript(readerModeJS) { _, _ in DispatchQueue.main.async {