Мое текущее расширение Chrome должно программно вставлять текст при вводе пользователем.Это прекрасно работает, однако, оно исправляет поведение отмены / повтора всех текстовых редакторов, которые я пробовал до сих пор.Итак, следующая процедура:
- введите текст
- вставьте текст программно
- введите текст
- нажмите ctrl-z трижды
не всегда возвращается в пустое состояние.Очень часто он застревает где-то посередине.Его поведение в основном противоречиво.
Вот MCVE скрипта контента:
function init() {
var $input = document.getElementsByTagName("textarea")[0];
if (!$input) {
console.log("No input element found.");
return true;
}
var $btn = document.createElement("button");
$btn.innerHTML = "Click";
$btn.addEventListener("click", function() {
var caretPos = $input.selectionStart;
$input.value = $input.value.substring(0, caretPos) + " test string " + $input.value.substring(caretPos);
});
$input.parentElement.insertBefore($btn, $input);
return true;
}
window.addEventListener("load", init);
<div><textarea></textarea></div>
(я также связал его как расширение Chrome на всякий случай.)
Я хочуОтмена / Повторить для идеального функционирования как в текстовой области, а также contenteditable узлов.Я также попробовал document.execCommand
в обоих режимах insertText
и insertHTML
, но безуспешно.Я посмотрел на два других связанных вопроса, но они не отвечают на мой запрос.( q1 , q2 )
Что еще может быть возможным решением этой проблемы?