文本选择在 macOS Sonoma 上的 Catalyst 应用程序的 WKWebView 中不起作用

问题描述 投票:0回答:1

在 macOS 14 Sonoma 上运行时,无法在 MacCatalyst 应用程序的 WkWebView 编辑器视图中选择任何内容。

任何选择手势或命令键都无法选择内容可编辑的WKWebView中的任何内容,因此无法激活任何编辑器工具。

我的应用程序使用基于 nnhubbard / ZSSRichTextEditor WKWebView 的富文本编辑器:https://github.com/nnhubbard/ZSSRichTextEditor。该应用程序是使用 Xcode 15.0 或 15.0.1 构建的。

该应用程序是一个 Catalyst 应用程序,它使用 ZSSRichTextEditor WKWebView 实现编辑器视图。

如果应用程序在 iOSmacOS 11、12 或 13Catalina、Monterey 或 Ventura)中运行,则不会出现此问题。此问题仅出现在 macOS 14 Sonoma中。

每当尝试选择 WKWebView 内容中的任何文本时,都会记录以下错误消息:

0x1359ecc18 - [pageProxyID = 14,webPageID = 15,PID = 14,932] WebPageProxy :: didFailProvisionalLoadForFrame:frameID = 1,isMainFrame = 1,domain = NSURLErrorDomain,代码= 18,446,744,073,709,550,614,isMainFrame = 1,willInternallyHandleFailure = 0

wkwebview mac-catalyst macos-sonoma
1个回答
0
投票

Apple 反馈提供了修复:

24 年 8 月 29 日,下午 2:31:25(美国中部时间) 苹果反馈 FB14734097 — macOS - 无法在可编辑的 WWebView 中选择文本 24 年 8 月 29 日,下午 2:31:25(美国中部时间)

你好!看起来您不久前报告了另一个雷达 - HTML 页面在所有浏览器中都同样损坏,包括 Safari。

我的建议是替换此 ZSSRichTextEditor.js 代码:

zss_editor.getCaretYPosition = function() {
    var sel = window.getSelection();
    // Next line is comented to prevent deselecting selection. It looks like work but if there are any issues will appear then uconmment it as well as code above.
    //sel.collapseToStart();
    var range = sel.getRangeAt(0);
    var span = document.createElement('span');// something happening here preventing selection of elements
    range.collapse(false);
    range.insertNode(span);
    var topPosition = span.offsetTop;
    span.parentNode.removeChild(span);
    return topPosition;
}

...用这个:

zss_editor.getCaretYPosition = function() {
    const sel = window.getSelection();
    if (!getSelection().rangeCount)
        return 0;

    const clientRects = getSelection().getRangeAt(0).getClientRects();
    return (clientRects.length ? clientRects[0].top : 0) + pageYOffset;
}

后者 (1) 更正确,(2) 性能更高,(3) 更兼容(也适用于 Chrome 和 Firefox)。

© www.soinside.com 2019 - 2024. All rights reserved.