html 如何在使用Command+Z时关闭Safari打开上一页?

qgelzfjb  于 2023-06-20  发布在  其他
关注(0)|答案(3)|浏览(114)

我最近在Safari中注意到,在某些情况下,如果我按Command+z,它会打开以前打开的浏览器选项卡。
它把我的网络应用程序搞得一团糟。有时它会正确地执行撤销,而有时它会打开上一页(当没有更多的撤销历史记录时)。这是一个bug,还是一个我可以在JavaScript或HTML中关闭的功能?我的应用程序并不总是在文本字段中有光标,所以我需要防止Safari采取的事件。
这是Mac OSX 10.11,Safari 10.1。
Safari从Undo Typing更改为Undo Close Tab:

mwg9r5ms

mwg9r5ms1#

这是完全正确的:"Safari正在从我的网页中窃取撤销键盘事件。"
就是这样Safari从你的键盘上窃取了CMD-Z,而这些CMD-Z通常会被发送到谷歌文档中。

syqv5f0l

syqv5f0l2#

虽然看起来this可能值得阅读,但我建议不要采用这种做法,而是研究一下应用程序的构建方式。重新打开以前关闭的标签页是人们在Web浏览器中执行的常见操作,您的应用程序应该能够处理此操作。

xesrikrc

xesrikrc3#

我为keypress事件的window对象添加了一个监听器,并在事件上调用了preventDefault():

function preventDefaultWindowOpen(prevent) {
    var isSafari;
    var useCapture = true;
    const KEYTYPE = "keypress";

    if (navigator.vendor && navigator.vendor.indexOf('Apple') > -1 && 
        navigator.userAgent && !navigator.userAgent.match('CriOS')) {
        isSafari = true;
    }
    else {
        return true;
    }

    if (window.preventOpenOnUndoKey==null) {
        window.preventOpenOnUndoKey = function(event) {
            if (event.keyCode==122 && event.metaKey==true) {
                event.preventDefault();
            }
        }
    }

    if (prevent) {
        window.addEventListener(KEYTYPE, window.preventOpenOnUndoKey, useCapture);
    }
    else {
        window.removeEventListener(KEYTYPE, window.preventOpenOnUndoKey, useCapture);
    }

    return true;
}

preventDefaultWindowOpen(true);

相关问题