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.
This commit is contained in:
parent
a041300b4f
commit
d1157defbe
@ -49,7 +49,9 @@ struct NativeWebView: View {
|
|||||||
guard let onTextSelected = onTextSelected else { return }
|
guard let onTextSelected = onTextSelected else { return }
|
||||||
|
|
||||||
// Poll for text selection using JavaScript
|
// Poll for text selection using JavaScript
|
||||||
Task {
|
Task { @MainActor in
|
||||||
|
let page = webPage // Capture the webPage
|
||||||
|
|
||||||
while true {
|
while true {
|
||||||
try? await Task.sleep(nanoseconds: 300_000_000) // Check every 0.3s
|
try? await Task.sleep(nanoseconds: 300_000_000) // Check every 0.3s
|
||||||
|
|
||||||
@ -77,13 +79,11 @@ struct NativeWebView: View {
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
do {
|
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 text = result["text"] as? String,
|
||||||
let startOffset = result["startOffset"] as? Int,
|
let startOffset = result["startOffset"] as? Int,
|
||||||
let endOffset = result["endOffset"] as? Int {
|
let endOffset = result["endOffset"] as? Int {
|
||||||
await MainActor.run {
|
onTextSelected(text, startOffset, endOffset)
|
||||||
onTextSelected(text, startOffset, endOffset)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
// Silently continue polling
|
// Silently continue polling
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user