Javascript 浏览器中用于撤消的事件侦听器

Javascript 浏览器中用于撤消的事件侦听器,javascript,dom,events,dom-events,undo,Javascript,Dom,Events,Dom Events,Undo,为了提供上下文,我的团队正在浏览器中构建一个富文本编辑器,需要在会话之间将状态持久化到服务器。编辑器的状态很明显会随着对文档的更新(包括按键事件)而改变,但是我们还应该考虑由撤销/重做事件触发的编辑器阶段的更新 不幸的是,浏览器没有本机撤消/重做事件。除了禁用上下文菜单外,一个建议的浮动似乎是停止映射到undo的键盘快捷键的按键事件的传播。但是,这仍然使用户能够直接导航到应用程序菜单栏中的Edit->Undo,这将直接触发document.execCommand('Undo'),并且不会触发事件

为了提供上下文,我的团队正在浏览器中构建一个富文本编辑器,需要在会话之间将状态持久化到服务器。编辑器的状态很明显会随着对文档的更新(包括按键事件)而改变,但是我们还应该考虑由撤销/重做事件触发的编辑器阶段的更新

不幸的是,浏览器没有本机撤消/重做事件。除了禁用上下文菜单外,一个建议的浮动似乎是停止映射到undo的键盘快捷键的按键事件的传播。但是,这仍然使用户能够直接导航到应用程序菜单栏中的
Edit->Undo
,这将直接触发
document.execCommand('Undo')
,并且不会触发事件。因此,我们不知道向服务器发送更新

这里有一个关于这个问题的W3C。在撰写本文时,似乎仍在寻找解决方案

当另一个浏览器文本编辑器遇到这个问题时,他们的团队似乎在“禁用本机撤销/堆栈”,这就是Facebook的实际功能。考虑到这似乎是我们正在处理的问题,有人知道如何禁用/替换浏览器的原生撤消/重做堆栈吗?显然,这是一个积极的解决方案,但在撰写本文时,这似乎是唯一的选择


同时,这个问题的答案可能隐藏在草案的代码中。如果没有人能打败我的团队,我会汇报草稿的进展。我认为至少值得记录这个问题。

最好的解决方案可能是从
contentEditable
元素中侦听取消公告的
onChange
事件。这不允许有关撤消的自定义行为,但它应该可以解决主要问题。另外,添加一个事件来提醒用户潜在的未保存更改,这将处理其他边缘情况。

链接: