From 07967d9d63286dcb0c5984d31c3a9e3fce867cc3 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Wed, 6 Dec 2023 00:31:49 +0400 Subject: [PATCH] Web app improvements --- submodules/WebUI/Sources/WebAppController.swift | 6 +++--- submodules/WebUI/Sources/WebAppWebView.swift | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/submodules/WebUI/Sources/WebAppController.swift b/submodules/WebUI/Sources/WebAppController.swift index 52269bb863..e218f55f5f 100644 --- a/submodules/WebUI/Sources/WebAppController.swift +++ b/submodules/WebUI/Sources/WebAppController.swift @@ -312,7 +312,7 @@ public final class WebAppController: ViewController, AttachmentContainable { self.backgroundColor = self.presentationData.theme.list.plainBackgroundColor } - let webView = WebAppWebView() + let webView = WebAppWebView(account: context.account) webView.alpha = 0.0 webView.navigationDelegate = self webView.uiDelegate = self @@ -418,8 +418,6 @@ public final class WebAppController: ViewController, AttachmentContainable { } }) }) - - self.setupWebView() } deinit { @@ -434,6 +432,8 @@ public final class WebAppController: ViewController, AttachmentContainable { override func didLoad() { super.didLoad() + self.setupWebView() + guard let webView = self.webView else { return } diff --git a/submodules/WebUI/Sources/WebAppWebView.swift b/submodules/WebUI/Sources/WebAppWebView.swift index b3262d1262..ee016c6db0 100644 --- a/submodules/WebUI/Sources/WebAppWebView.swift +++ b/submodules/WebUI/Sources/WebAppWebView.swift @@ -3,6 +3,7 @@ import UIKit import Display import WebKit import SwiftSignalKit +import TelegramCore private let findActiveElementY = """ function getOffset(el) { @@ -91,8 +92,22 @@ function disconnectObserver() { final class WebAppWebView: WKWebView { var handleScriptMessage: (WKScriptMessage) -> Void = { _ in } - init() { + init(account: Account) { let configuration = WKWebViewConfiguration() + + let uuid: UUID + + if let current = UserDefaults.standard.object(forKey: "TelegramWebStoreUUID_\(account.id.int64)") as? String { + uuid = UUID(uuidString: current)! + } else { + uuid = UUID() + UserDefaults.standard.set(uuid.uuidString, forKey: "TelegramWebStoreUUID_\(account.id.int64)") + } + + if #available(iOS 17.0, *) { + configuration.websiteDataStore = WKWebsiteDataStore(forIdentifier: uuid) + } + let contentController = WKUserContentController() var handleScriptMessageImpl: ((WKScriptMessage) -> Void)?