Javascript:为textarea导出浏览器的本机撤消/重做堆栈

cgn*_*utt 2 html javascript browser firefox undo

是否有任何方法可以为textarea导出/保存任何浏览器的本机撤消/重做堆栈?我希望能够在事后撤消/重做所有在textarea中输入的内容.

我还想使用javascript调用本机undo/redo堆栈,这可以通过以下方式轻松完成:

$('#textarea_im_using').focus();
document.execCommand('undo', false, null); 
Run Code Online (Sandbox Code Playgroud)

但是,这导致控制台中出现NS_ERROR_FAILURE:Failure错误消息.有什么想法吗?

总之,我有两个问题:

  1. 导出本机浏览器的撤消堆栈
  2. 调用本机浏览器的撤消方法.

我目前正在使用Mozilla Firefox(最新版本).我很乐意尝试任何可用的浏览器(Safari除外).

T.J*_*der 6

execCommand,根据MDN,涉及文件设计模式或contentEditable元件,而不是像表单字段textarea.

使用a contentEditable div代替可能会让你做你想要完成的事情.当然,在支持它的浏览器,它可以让您以编程方式触发一个undo动作,我相信你有过更多的控制contentEditable div比过textarea.

实例:

HTML:

<p>Edit me:</p>
<div id="editor"></div>
<button id="buttonUndo">Undo</button>
Run Code Online (Sandbox Code Playgroud)

CSS:

#editor {
  border: 1px solid black;
  min-height: 2em;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

var editor = document.getElementById("editor");
var buttonUndo = document.getElementById("buttonUndo");
editor.contentEditable = true;
buttonUndo.onclick = function() {
  document.execCommand("undo", false, null);
};
Run Code Online (Sandbox Code Playgroud)

(onclick在那里使用,因为IE8支持这个东西,我不喜欢玩addEventListener/ attachEvent游戏...)