/**
* 模拟富文本粘贴,触发编辑器图片上传
* @param {HTMLElement} targetElement - 富文本编辑器容器
* @param {string} htmlContent - 带图片的HTML内容(需包含<meta charset='utf-8'>)
*/
function simulateRichTextPaste(targetElement, htmlContent) {
// 转换纯文本(兼容纯文本场景)
const convertHtmlToPlainText = (html) => {
const temp = document.createElement('div');
temp.innerHTML = html;
return temp.textContent || temp.innerText || '';
};
const plainText = convertHtmlToPlainText(htmlContent);
// 构造虚拟剪贴板
const clipboardData = new DataTransfer();
clipboardData.setData('text/html', htmlContent);
clipboardData.setData('text/plain', plainText);
// 构造粘贴事件
const pasteEvent = new ClipboardEvent('paste', {
bubbles: true,
cancelable: true,
clipboardData
});
// 修复部分浏览器clipboardData属性不可访问问题
Object.defineProperty(pasteEvent, 'clipboardData', {
value: clipboardData,
configurable: true
});
// 触发粘贴事件
targetElement.dispatchEvent(pasteEvent);
// 触发编辑器内部事件(根据编辑器类型调整,如Tiptap/Quill)
const dispatchEditorEvents = (el) => {
const inputEvent = new Event('input', { bubbles: true });
el.dispatchEvent(inputEvent);
};
dispatchEditorEvents(targetElement);
console.log('✅ 模拟富文本粘贴成功,编辑器已识别内容');
}
// 使用示例
const html = `
<meta charset='utf-8'>
<html>
<head></head>
<body>
<p>测试粘贴图片</p>
<p><img src="data:image/png;base64,xxx" alt="测试图片"></p>
</body>
</html>
`;
// 传入编辑器容器和HTML内容
simulateRichTextPaste(document.querySelector('.editor'), html);