调试Redactor编辑器的旧版本时,我们发现了一个非常棘手的情况。总之,从选择范围中删除span
节点会导致Chrome v60中execCommand
的错误行为,尽管在Firefox和Chrome v58中它正常工作。从选择范围中删除节点后,ExecCommand在Chrome 60中正常工作
这里是重现问题的小提琴:https://jsfiddle.net/47wqpv1f/4/。
选择一个单词并按下按钮。您可能会在这里看到,在Firefox 60和Chrome 58中,文本会在Chrome 60中受到攻击,但它仍未被触及。
在格式化操作(例如, 粗体,编辑器围绕具有两个不同“标记”元素的选择范围。
var range2 = range.cloneRange();
var marker = document.createElement('span');
marker.id="selection-marker-1";
marker.className="redactor-selection-marker";
marker.innerHTML = markerHTML;
range2.collapse(true);
range2.insertNode(marker);
然后编辑器做一些操作与选择,之后重置选择匹配标记边界。
range.setStart(document.getElementById('selection-marker-1'), 0);
range.setEnd(document.getElementById('selection-marker-2'), 0);
之后,编辑器删除标记节点,其中的想法应该保留原始选择。
marker.parentNode.removeChild(marker);
marker2.parentNode.removeChild(marker2);
接下来,编辑再添标志物格式化过程的下一个步骤,然后执行execCommand
通过罢工。
Chrome 60只会将strike
标记添加到左标记,而其他提到的浏览器将围绕整个选择(这是我在这种情况下的预期行为)包装strike
。
我可以在这里想到不同的解决方法,但在新的Chrome中改变行为的实际原因是什么?
它通常被称为[错误](https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Leptoglossus_occidentalis_g3.jpg/800px-Leptoglossus_occidentalis_g3.jpg)。许多软件都有它,为了解决这些问题,一些公司使用跟踪工具,让用户了解它,并最终尝试摆脱这些。您找到此标本的软件的开发人员团队拥有[此工具](http://chromiumbugs.appspot.com/),均对您开放。 – Kaiido