一尘不染

execCommand中“粘贴为纯文本”的JavaScript技巧

javascript

根据execCommand下面介绍的示例,我有一个基本的编辑器。有三种方法可以在execCommand区域内粘贴文本:

  • Ctrl+V
  • 右键单击->粘贴
  • 右键单击->作为纯文本粘贴

我想只粘贴没有任何HTML标记的纯文本。如何强制前两个动作粘贴纯文本?

可能的解决方案: 我想到的方法是为(Ctrl+ V)的keyup事件设置侦听器,并在粘贴之前剥离HTML标记。

  1. 这是最好的解决方案吗?
  2. 避免粘贴任何HTML标记是否安全?
  3. 如何将侦听器添加到右键单击->粘贴?

阅读 729

收藏
2020-05-01

共1个答案

一尘不染

它将拦截paste事件,取消paste,并手动插入剪贴板的文本表示形式:
这应该是最可靠的:

  • 它捕获各种粘贴(Ctrl+ V,上下文菜单等)
  • 它使您可以直接以文本形式获取剪贴板数据,因此您不必进行难看的修改即可替换HTML。

不过,我不确定是否支持跨浏览器。

editor.addEventListener("paste", function(e) {
    // cancel paste
    e.preventDefault();

    // get text representation of clipboard
    var text = (e.originalEvent || e).clipboardData.getData('text/plain');

    // insert text manually
    document.execCommand("insertHTML", false, text);
});
2020-05-01