Я предполагаю (я не смотрел), что они отвечают на paste
событие и используют getData
метод clipboardData
свойство объекта ClipboardEvent
, запрашивающее его для форматированного текста (возможно, передающее "text/html"
для параметра формата). Затем они берут полученный HTML-код и включают его в редактор.
Например: если вы скопируете текст абзаца выше в буфер обмена, запустите этот фрагмент, щелкните в любом месте тела фрагмента и нажмитекомбинация клавиш вставки в вашей системе (Ctrl + V и т. д.), на ней должен отображаться текст в формате из буфера обмена:
document.addEventListener("paste", function(e) {
document.getElementById("output").innerHTML =
(e.clipboardData && e.clipboardData.getData("text/html")) || "";
});
<div>Click here to focus the window, then do a paste</div>
<div id="output"></div>
Они, вероятно, отступят к "text/plain"
, если ничего не получат за "text/html"
:
document.addEventListener("paste", function(e) {
if (e.clipboardData) {
var output = document.getElementById("output");
var str = e.clipboardData.getData("text/html");
if (str) {
console.log("html");
output.innerHTML = str;
} else {
console.log("plain text");
str = e.clipboardData.getData("text/plain");
output.textContent = str;
}
}
});
<div>Click here to focus the window, then do a paste</div>
<div id="output"></div>