我知道有很多现有的问题与获取
我们目前正在开发两个 WebExtensions 来进行自动更正,以便在用户输入时进行更正。例如,如果用户键入
我们目前的方法部分源于这个答案:https://dev59.com/oonca4cB1Zd3GeqP5xEM#29258657,它提供了相对于
请查看我们的原始源代码以获取完整上下文。这种方法似乎在99%的网站上都可以正常工作,但在Twitter上会出现问题。当用户输入时,光标会不断重置到行首,导致文本混乱(有关更多信息,请参见相应问题)。我们猜测Twitter不喜欢空字符,但我们尝试了其他非打印字符,也遇到了同样的问题。
我们正在寻找另一种方法来确定插入符号相对于innerText的位置,这种方法将适用于所有网站,包括Twitter。它需要支持最新版本的Firefox和Chrome,包括Firefox ESR。它还需要具有良好的性能,因为它在每次按键时都会运行。
ContentEditable
元素中插入符位置有关。几乎所有这些现有解决方案都提供了相对于 textContent
的插入符位置。一些例子是 this one 或 this one。我们目前正在开发两个 WebExtensions 来进行自动更正,以便在用户输入时进行更正。例如,如果用户键入
:)
,它可以自动更正为“。”为了使自动更正起作用,它需要相对于 innerText
获取插入符位置。textContent
可包括空格字符和其他差异,这些差异在文本呈现时实际上并不出现,这会破坏自动更正功能。我们目前的方法部分源于这个答案:https://dev59.com/oonca4cB1Zd3GeqP5xEM#29258657,它提供了相对于
innerHTML
的插入符位置。它克隆元素,插入空字符,确定索引,然后移除空字符。// document.designMode is handled the same, see https://github.com/rugk/unicodify/issues/54
if (target.isContentEditable || document.designMode === "on") {
target.focus();
const _range = document.getSelection().getRangeAt(0);
if (!_range.collapsed) {
return null;
}
const range = _range.cloneRange();
const temp = document.createTextNode("\0");
range.insertNode(temp);
const caretposition = target.innerText.indexOf("\0");
temp.parentNode.removeChild(temp);
return caretposition;
}
请查看我们的原始源代码以获取完整上下文。这种方法似乎在99%的网站上都可以正常工作,但在Twitter上会出现问题。当用户输入时,光标会不断重置到行首,导致文本混乱(有关更多信息,请参见相应问题)。我们猜测Twitter不喜欢空字符,但我们尝试了其他非打印字符,也遇到了同样的问题。
我们正在寻找另一种方法来确定插入符号相对于innerText的位置,这种方法将适用于所有网站,包括Twitter。它需要支持最新版本的Firefox和Chrome,包括Firefox ESR。它还需要具有良好的性能,因为它在每次按键时都会运行。