getBoundingClientRect 在 Safari 中返回 0 表示上、左、右、下

Tar*_*gar 5 html javascript safari contenteditable draftjs

所以,我有一个由 Facebook 提供支持的 contenteditable div draft-js。我需要获得该 div 内插入符号的视觉位置,并且我实现了这个(适用于 Firefox 和 Chrome):

const selection = window.getSelection && window.getSelection();
if (selection.rangeCount > 0) {
    const coordinates = selection.getRangeAt(0).getBoundingClientRect();
}
Run Code Online (Sandbox Code Playgroud)

在 Chrome 和 Firefox 中我得到了正确的坐标。然而,在 Firefox 中,我的所有位置属性都为 0。有什么解决方法/跨浏览器解决方案吗?

Evg*_*huk 3

似乎我已经使用下一个代码解决了问题:

let range = window.getSelection().getRangeAt(0);
range = range.cloneRange();
range.setStart(range.startContainer, 0);
range.getBoundingClientRect();
Run Code Online (Sandbox Code Playgroud)

这是小提琴

2020 年 2 月 13 日更新:

当输入是多行时,这里更新了第一行的固定插入符位置的小提琴。