我有一个基于 execCommand
的基本编辑器,遵循此处介绍的示例。可以通过三种方式在 execCommand
区域内粘贴文本:
- Ctrl+V
- 右键单击 -> 粘贴
- 右键单击 -> 粘贴为纯文本
我想只允许粘贴没有任何 HTML 标记的纯文本。如何强制前两个操作粘贴纯文本?
可能的解决方案: 我能想到的方法是为 (Ctrl+V) 的 keyup 事件设置监听器并去除 HTML 标记粘贴前。
- 这是最好的解决方案吗?
- 避免在粘贴中使用任何 HTML 标记是万无一失的吗?
- 如何为右键单击 -> 粘贴添加监听器?
最佳答案
会拦截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/