From d015300de14fa45b1edb33a275dc434d3cd273f1 Mon Sep 17 00:00:00 2001 From: Newman Chow Date: Thu, 29 Feb 2024 14:28:38 +0800 Subject: [PATCH] Disable text selection in wkwebview #3846 --- Sources/AGWKWebViewController.swift | 15 ++++++++++++++- Sources/WKWebViewUIImplementation.swift | 6 +++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Sources/AGWKWebViewController.swift b/Sources/AGWKWebViewController.swift index 20c306f2..e84183a5 100644 --- a/Sources/AGWKWebViewController.swift +++ b/Sources/AGWKWebViewController.swift @@ -21,16 +21,29 @@ class AGWKWebViewController: UIViewController, WKNavigationDelegate { private let webView: WKWebView private var result: URL? + private let disableUserSelectSource: String = """ + document.documentElement.style.webkitUserSelect = 'none'; + document.documentElement.style.userSelect = 'none'; + """ + init(url: URL, redirectURI: URL, completionHandler: @escaping CompletionHandler) { self.url = url self.redirectURI = redirectURI self.completionHandler = completionHandler let configuration = WKWebViewConfiguration() + + // Inject `user-select: none` style + let disableUserSelectScript = WKUserScript( + source: self.disableUserSelectSource, + injectionTime: .atDocumentStart, + forMainFrameOnly: false + ) + configuration.userContentController.addUserScript(disableUserSelectScript) + self.webView = WKWebView(frame: .zero, configuration: configuration) self.webView.translatesAutoresizingMaskIntoConstraints = false self.webView.allowsBackForwardNavigationGestures = true - super.init(nibName: nil, bundle: nil) self.webView.navigationDelegate = self 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