Greasemonkey警报确认关闭窗口不起作用?

时间:2012-12-23 22:45:38

标签: javascript firefox greasemonkey

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

作为安全措施,Firefox no longer allows pages to set a custom message for the beforeunload dialog.因此,return语句在使用addEventListener(您应该)时没有任何效果。

要停止卸载页面,您需要使用preventDefault(),如下所示:

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

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

这会抛出不可改变的对话框:

Standard page-quit verification dialog


如果您想显示自定义消息,可以使用 额外 对话框执行此操作,如下所示:

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. 如果用户按确定,则页面将退出,不再有任何问题。
    但是,如果用户按取消,则会弹出您确定对话框,用户仍然必须按保持在页面

  2. 根据HTML5规范,future versions of Firefox might stop allowing confirm() during beforeunload events.