execCommand 中 'paste as plain text` 的 Javascript 技巧

标签 javascript html dom-events execcommand

我有一个基于 execCommand 的基本编辑器,遵循此处介绍的示例。可以通过三种方式在 execCommand 区域内粘贴文本:

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

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

可能的解决方案: 我能想到的方法是为 (Ctrl+V) 的 keyup 事件设置监听器并去除 HTML 标记粘贴前。

  1. 这是最好的解决方案吗?
  2. 避免在粘贴中使用任何 HTML 标记是万无一失的吗?
  3. 如何为右键单击 -> 粘贴添加监听器?

最佳答案

会拦截paste事件,取消paste,手动插入剪贴板的文本表示:
http://jsfiddle.net/HBEzc/ . 这个应该是最靠谱的:

  • 它捕获各种粘贴(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);
});

关于execCommand 中 'paste as plain text` 的 Javascript 技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32500453/

相关文章:

javascript - Electron-dl 使用 promise.all 进行多个同时下载

javascript - 通过 Window.open 的 Web Intent 回调事件只是没有发生

html - Firefox 中的 iframe 调整大小问题

javascript - 我可以通过 beforeSend 事件更改 jQuery.ajax 的函数调用参数(在数据中发送)吗?

javascript - 添加删除事件

javascript - 在 MomentJS 中确定午夜后的营业时间

javascript - 如何在页面重新加载后重置 UI5 中的筛选项?

javascript - 使用 mongoose 在 node.js 上进行单元测试的结构

javascript - 使用水平滚动显示 Wordpress 帖子缩略图

html - 使用CSS将跨度定位在图像下方