0

我正在研究应该是一个简单的 Greasemonkey 脚本,以确认如果您输入了冗长的消息,您想要关闭窗口。

几年前我有这个脚本的工作版本,但它工作的网站发生了变化,所以我希望修复它。但是,我什至无法得到一个简单的确认工作:

function confirmClose() {
    return 'You have a long message typed. Are you sure you want to close?';
}

window.addEventListener('beforeunload', confirmClose, true);

我很肯定脚本正在它应该运行的页面上运行,但是每当我尝试关闭窗口时,我都没有收到任何确认。

4

1 回答 1

1

作为一项安全措施,Firefox 不再允许页面为beforeunload对话框设置自定义消息。因此,该return语句在使用时没有任何效果addEventListener(您应该这样做)。

要阻止页面卸载,您需要preventDefault()像这样使用:

window.addEventListener ('beforeunload', confirmClose, false);

function confirmClose (zEvent) {
    zEvent.preventDefault ();
}

这将抛出不可更改的对话框:

标准页面退出验证对话框


如果要显示自定义消息,可以使用额外的对话框来实现,如下所示:

window.addEventListener ('beforeunload', confirmClose, false);

function confirmClose (zEvent) {
    var doQuitPage = confirm (
        "You have a long message typed. Are you sure you want to close?"
    );
    if ( ! doQuitPage) {
        zEvent.preventDefault ();
    }
}

但请注意两个重要的烦恼:

  1. 如果用户按下OK,则页面将退出而不再混乱。
    但是,如果用户按下Cancel,则会弹出Are you sureStay on Page对话框,用户仍然必须按下。

  2. 根据 HTML5 规范,未来版本的 Firefox 可能会在事件期间停止允许。confirm()beforeunload

于 2012-12-24T02:46:24.503 回答