javascript - 在Safari中拦截CMD+Z、CMD+SHIFT+Z和CMD+Y

标签 javascript safari dom-events keydown

我正在帮助一家公司在 WYSIWYG 编辑器中调试其撤消/重做功能的一些问题。不幸的是,Safari 似乎吞噬了 CMD+Z 击键,它永远不会进入按键回调。

有没有办法在 Javascript 中检测这些击键并防止默认操作? (编辑器有自己的撤消/重做堆栈)。

更新

抱歉,我应该说当浏览器 native 撤消堆栈为空时,或者当输入或 contenteditable 不在焦点时,我可以拦截 CMD+Z。否则它似乎不会被触发或冒泡。

最佳答案

我有一个奇怪的情况。我的原始代码并没有阻止事件冒泡:

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

当我添加它并刷新页面时,浏览器仍在拦截击键。

我只是偶然发现,如果我关闭浏览器选项卡并打开一个新的测试页面,浏览器一定重置了一些东西,现在我能够拦截并停止默认的撤消/重做功能:

使用按键事件:

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;
    }
}

请客:)

关于javascript - 在Safari中拦截CMD+Z、CMD+SHIFT+Z和CMD+Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32957841/

相关文章:

c# - SignalR - Websockets - 超出缓冲区长度

html - Safari "Shadow Content (User Agent)"导致输入内容被截断

CSS3 动画方向反转在 Safari 中不起作用

internet-explorer-9 - Internet Explorer 9、10 和 11 事件构造函数不起作用

javascript - 如何检测滚动条上的鼠标弹起? (或 "scrollEnd"事件)

javascript - 不使用 JavaScript 的浏览器版本检测?

javascript - 新的 jQuery 插件 - 获取输入和反馈的最佳方式是什么?

javascript - 加载未显示在框内

ios - 在 Safari 上发布新版本后,我的 PWA 网络应用程序继续显示旧版本(但在 chrome 上运行良好)?

javascript - Firefox 6 的 Event.target 问题