在 macOS 14 Sonoma 上运行时,无法在 MacCatalyst 应用程序的 WkWebView 编辑器视图中选择任何内容。
任何选择手势或命令键都无法选择内容可编辑的WKWebView中的任何内容,因此无法激活任何编辑器工具。
我的应用程序使用基于 nnhubbard / ZSSRichTextEditor WKWebView 的富文本编辑器:https://github.com/nnhubbard/ZSSRichTextEditor。该应用程序是使用 Xcode 15.0 或 15.0.1 构建的。
该应用程序是一个 Catalyst 应用程序,它使用 ZSSRichTextEditor WKWebView 实现编辑器视图。
如果应用程序在 iOS 或 macOS 11、12 或 13(Catalina、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
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)。