在Safari中拦截CMD + Z,CMD + SHIFT + Z和CMD + Y

问题描述 投票:3回答:2

我正在帮助公司在所见即所得编辑器中调试其撤消/重做功能的一些问题。不幸的是,Safari似乎吞噬了[[CMD + Z击键,并且它从未进入击键回调。

是否有一种方法可以检测Javascript中的这些击键并阻止默认操作? (编辑器具有自己的撤消/重做堆栈)。

更新

抱歉,我应该说,当浏览器的本地撤消堆栈为空,或者输入或contenteditable不在焦点时,我可以拦截

CMD

+ Z。否则,它似乎不会被触发或冒泡。
javascript safari dom-events keydown
2个回答
1
投票
我有一个奇怪的情况。我原来的代码并不能防止事件冒泡:

evt.preventDefault(); evt.stopPropagation();

当我添加此内容并刷新页面时,浏览器仍在拦截按键。只是偶然地发现,如果我关闭浏览器选项卡并在测试页上打开一个新选项,则浏览器必须重置了某些内容,现在我能够拦截并停止默认的撤消/重做功能:使用keydown事件:

if (evt.metaKey || evt.ctrlKey) { switch (evt.which) { case 89: // redo, CMD+Y evt.preventDefault(); evt.stopPropagation(); // Do your Redo stuff break; case 90: if (evt.shiftKey) { // redo, CMD+SHIFT+Z evt.preventDefault(); evt.stopPropagation(); // Do your Redo stuff } else { // undo, CMD+Z evt.preventDefault(); evt.stopPropagation(); // Do your Undo stuff } break; } }

请客:)

0
投票
event.preventDefault()仅足以拦截Safari。需要注意的关键是您必须在keyup上执行此操作,而不是按下键盘。

在Safari中,当您按下CMD-Z时,page命令将立即运行,例如甚至在按键事件开始之前。

© www.soinside.com 2019 - 2024. All rights reserved.