Javascript 如何在使用命令+;Z

Javascript 如何在使用命令+;Z,javascript,html,macos,safari,Javascript,Html,Macos,Safari,我最近在Safari中注意到,在某些情况下,如果我按Command+z,它将打开以前打开的浏览器选项卡 它弄乱了我的网络应用程序。有时它会正确执行撤消,而有时它会打开上一页(当不再有撤消历史记录时)。这是一个bug还是我可以在JavaScript或HTML中关闭的功能?我的应用程序并不总是将光标放在文本字段中,因此我需要防止Safari记录事件 这是MacOSX10.11,Safari10.1 Safari从撤消键入更改为撤消关闭选项卡: 虽然它看起来可能值得一读,但我建议不要采用这种做法,而

我最近在Safari中注意到,在某些情况下,如果我按Command+z,它将打开以前打开的浏览器选项卡

它弄乱了我的网络应用程序。有时它会正确执行撤消,而有时它会打开上一页(当不再有撤消历史记录时)。这是一个bug还是我可以在JavaScript或HTML中关闭的功能?我的应用程序并不总是将光标放在文本字段中,因此我需要防止Safari记录事件

这是MacOSX10.11,Safari10.1

Safari从撤消键入更改为撤消关闭选项卡:


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

我为按键事件的窗口对象添加了一个侦听器,并在事件中调用了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);

Safari具有撤消和重做键盘快捷键。如果撤销历史堆栈中没有其他撤销事件,Safari将重新加载上一页。Safari正在改变它的行为。这让我的用户感到不安。Safari认为它在做正确的事情,但在这种情况下,它在做假设。我正在努力保持正确的行为。我添加了一个屏幕截图。Safari正在从我的网页中窃取撤消键盘事件。即撤消最后一个操作。如果您在文本输入中键入内容,CMD+z将撤消您键入的文本。如果你不想帮忙,那没关系。我的谈话到此为止。我的道歉——我无意显得粗鲁。我想说的是,cmd+z在Safari中有一个明确定义的函数。当你说cmd+z导致页面刷新时,我仍然不确定你的意思。我自己似乎无法复制它。希望这里的其他人能给你一些帮助:)我理解你来自哪里。有些行为内置于应用程序或框架中,添加了默认操作。但如果您不想使用该操作,并且SDK允许,则可以调用event.preventDefault()并阻止它。在本例中,Safari确定创建了一个条件,即如果撤消堆栈中没有任何内容,撤消键盘命令将打开上一个窗口。这不是我的应用程序中预期的操作,这就是为什么我需要解释我想要从浏览器中得到什么。