QuillJS编辑器粘贴移除格式方案失效及替代方案问询
原方案当前可用性说明
你提到的旧拦截方案仅对QuillJS 1.3.7及更早版本有效。从2.0.0正式版发布后,Quill重构了剪贴板模块的事件触发和格式解析优先级,原方案重写匹配器的逻辑会被内置的默认格式解析规则覆盖,目前高版本用户下该方案已经普遍失效。
高版本可用替代实现方案
两种可选方案可以根据你的需求选择:
方案1:完全禁止粘贴格式,仅保留纯文本
直接重写剪贴板的粘贴事件逻辑,强制读取纯文本内容插入:
const quill = new Quill('#editor', { // 此处保留你原有的Quill配置 }); quill.clipboard.onPaste = function (e) { e.preventDefault(); // 读取剪贴板内的纯文本内容 const pasteText = (e.clipboardData || window.clipboardData).getData('text/plain'); const cursorRange = quill.getSelection(); if (cursorRange) { // 删除选中内容(如果有选中的文本) quill.deleteText(cursorRange.index, cursorRange.length); // 插入纯文本 quill.insertText(cursorRange.index, pasteText); // 移动光标到粘贴内容末尾 quill.setSelection(cursorRange.index + pasteText.length); } }
方案2:保留指定允许的格式,过滤其余格式
如果不需要完全禁用粘贴格式,仅需要过滤不在你开放功能列表内的格式,可以用下面的匹配器规则:
const quill = new Quill('#editor', { // 此处保留你原有的Quill配置 }); // 替换为你实际开放给用户的格式列表 const ALLOWED_FORMATS = ['bold', 'italic', 'link']; quill.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => { return delta.map(op => { if (!op.attributes) return op; // 过滤掉不在允许列表中的格式属性 const validAttrs = {}; Object.keys(op.attributes).forEach(attr => { if (ALLOWED_FORMATS.includes(attr)) { validAttrs[attr] = op.attributes[attr]; } }); op.attributes = Object.keys(validAttrs).length ? validAttrs : undefined; return op; }); });
两种方案都需要在Quill实例初始化完成后执行,不要放入初始化的modules配置项中。
内容的提问来源于stack exchange,提问作者yldm
相关产品推荐
相关产品推荐

