| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import AppKit
- import WebKit
- @MainActor
- enum RedditWebViewManager {
- private static let processPool = WKProcessPool()
- static func makeConfiguration(includeLoginBridge: Bool = true) -> WKWebViewConfiguration {
- let configuration = WKWebViewConfiguration()
- configuration.processPool = processPool
- configuration.websiteDataStore = .default()
- configuration.defaultWebpagePreferences.allowsContentJavaScript = true
- configuration.preferences.isElementFullscreenEnabled = true
- let boundaryScript = WKUserScript(
- source: RedditPostBoundaryStyle.injectionScript,
- injectionTime: .atDocumentEnd,
- forMainFrameOnly: true
- )
- configuration.userContentController.addUserScript(boundaryScript)
- let chromeScript = WKUserScript(
- source: RedditHomeChromeStyle.injectionScript,
- injectionTime: .atDocumentEnd,
- forMainFrameOnly: true
- )
- configuration.userContentController.addUserScript(chromeScript)
- let authChromeScript = WKUserScript(
- source: RedditAuthChromeStyle.injectionScript,
- injectionTime: .atDocumentEnd,
- forMainFrameOnly: true
- )
- configuration.userContentController.addUserScript(authChromeScript)
- if includeLoginBridge {
- let loginBridgeScript = WKUserScript(
- source: RedditLoginBridgeStyle.injectionScript,
- injectionTime: .atDocumentStart,
- forMainFrameOnly: true
- )
- configuration.userContentController.addUserScript(loginBridgeScript)
- configuration.userContentController.add(
- RedditLoginScriptBridge.shared,
- name: RedditLoginBridgeStyle.messageHandlerName
- )
- }
- return configuration
- }
- static func makeWebView() -> WKWebView {
- let webView = WKWebView(frame: .zero, configuration: makeConfiguration())
- webView.allowsBackForwardNavigationGestures = true
- webView.allowsMagnification = true
- webView.customUserAgent = RedditWebAuthHelper.safariUserAgent
- applyUnderPageBackground(to: webView, isDarkMode: AppearanceManager.shared.isDarkMode)
- return webView
- }
- static func applyUnderPageBackground(to webView: WKWebView, isDarkMode: Bool) {
- webView.underPageBackgroundColor = AppearanceManager.webUnderPageBackgroundColor(isDarkMode: isDarkMode)
- }
- }
|