From d1157defbed6e2b4e6d9776e637e1f938129a629 Mon Sep 17 00:00:00 2001 From: Ilyas Hallak Date: Wed, 22 Oct 2025 15:54:55 +0200 Subject: [PATCH] fix: Resolve WebPage binding error in NativeWebView text selection Capture webPage locally in Task to avoid @State binding issues when calling evaluateJavaScript in async context. --- readeck/UI/Components/NativeWebView.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/readeck/UI/Components/NativeWebView.swift b/readeck/UI/Components/NativeWebView.swift index f0ebd0b..00ac47e 100644 --- a/readeck/UI/Components/NativeWebView.swift +++ b/readeck/UI/Components/NativeWebView.swift @@ -49,7 +49,9 @@ struct NativeWebView: View { guard let onTextSelected = onTextSelected else { return } // Poll for text selection using JavaScript - Task { + Task { @MainActor in + let page = webPage // Capture the webPage + while true { try? await Task.sleep(nanoseconds: 300_000_000) // Check every 0.3s @@ -77,13 +79,11 @@ struct NativeWebView: View { """ do { - if let result = try await webPage.evaluateJavaScript(script) as? [String: Any], + if let result = try await page.evaluateJavaScript(script) as? [String: Any], let text = result["text"] as? String, let startOffset = result["startOffset"] as? Int, let endOffset = result["endOffset"] as? Int { - await MainActor.run { - onTextSelected(text, startOffset, endOffset) - } + onTextSelected(text, startOffset, endOffset) } } catch { // Silently continue polling