是否替换了document.execCommand? (或者使用document.execCommand是否安全?)

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

我正在使用香草JavaScript和document.execCommand()构建业余富文本编辑器,对于启用文本编辑器的核心功能至关重要。

例如,粗体,斜体和无序列表命令:

Array.from(toolbarBtn).forEach(btn => {
  btn.addEventListener('click', (e) => {
    e.preventDefault();
    if (e.target.id === "toolbar__btn--bold") {
      format('bold');
    }
    if (e.target.id === "toolbar__btn--italic") {
      format('italic');
    }
    if (e.target.id === "toolbar__btn--unorderedlist") {
      format('insertunorderedlist');
    }
});
});

但是,当在MDN Web文档上查找此命令时,发现该命令已被废弃:

Obsolete此功能已过时。尽管它可能在某些浏览器中仍然可以工作,但不建议使用它,因为可以随时将其删除。尝试避免使用它。

所以,我想知道香草JavaScript中是否有任何替代方法可以像execCommand()一样创建富文本编辑器的所有功能?

Google搜索没有给我任何结果,因此我想知道与此同时宣布该方法过时,但没有建议替代方法的可能性。

javascript rich-text-editor execcommand
1个回答
1
投票

对MDN标记document.execCommand()的更改都已过时,并且在https://github.com/mdn/browser-compat-data/commit/2d3890a处进行了相关更改,部分原因是https://w3c.github.io/editing/ActiveDocuments/execCommand.html的红色警告带有以下声明:

此规范不完整,预计不会超出草案状态。作者不应直接使用其中的大多数功能,而应使用JavaScript编辑库。用户代理不能一致或完全实现本文档中描述的功能,并且在可预见的将来,这种情况也不会改变。

就香草JavaScript中的任何替换方法而言,同一警告框显示为:

预计将来两个规范都将被内容可编辑和输入事件替换

…但是可悲的是,我们还没有到那儿。因此,不幸的是,即使我们还没有替代品,我们现在也知道document.execCommand()不能以跨浏览器的方式进行互操作,并且浏览器项目也无法修复它。这就是MDN警告说的原因:

不鼓励使用它。尝试避免使用它。

因此,正如上面的评论所言,它类似于拖放的情况:已知它以多种方式被破坏,并且这种方式已经存在了很长时间,因为修复它基本上是不实际的。

这就是为什么规范中的红色警告框还显示开发人员和作者的原因:

不应直接使用大多数这些功能,而应使用JavaScript编辑库

[]在线富文本编辑器工具(如CKEditor和TinyMCE)中可用的JavaScript编辑库为您“覆盖” document.execCommand()中所有潜在的缺陷。如果要尝试从头开始在香草JavaScript中为document.execCommand()编写自己的健壮处理方法,那么经过大量的工作和时间,基本上,您将需要重复创建基于JavaScript的JavaScript库的工作工具。

因此,最重要的是:为节省大量时间和工作,请使用可用的库之一。

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