触发 beforeunload/unload 事件的 jQuery 替代库

4

编辑: 由于我的问题似乎不太清楚 - 我只想在用户关闭浏览器/输入新链接/点击现有链接离开页面时添加confirm()消息。

我已经阅读了很多关于beforeunload/unload事件的主题,但是没有一个能真正帮助到我,可能是我做错了什么。

我已经通过单击所有链接使脚本工作,但是'beforeunload'事件在我的情况下不起作用。

普通脚本

$('a').on('mousedown', function(){
    var message = 'You are about to leave the page. Continue?'
    var result = confirm(message)
    if (result) {
        // some stuff
    } else {
        // some other stuff
    }
})

尝试使用beforeunload。
$(window).on('beforeunload', function(){
    var message = 'You are about to leave the page. Continue?'
    var result = confirm(message)
    if (result) {
        // some stuff
    } else {
        // some other stuff
    }
})

什么都没有发生。我已经尝试了unload事件,但仍然没有运气。


在你的编辑之后,你只能从onbeforeunload事件中返回一个字符串。这将会提示一个确认框。请注意,据我所知,FF不允许自定义消息。无论如何,你可能会遇到许多其他问题,使用这个事件时应尽量避免。 - A. Wolff
有没有其他的库可以实现在关闭浏览器等操作时弹出确认对话框? - izdi
@skzd 这不是 jQuery 的功能,而是 JavaScript 的功能。任何 JavaScript 库都不会允许你在 beforeunload 事件中调用 confirm() - astex
事件的行为取决于浏览器的实现,JavaScript 无能为力。如果有任何库可以以任何方式修改它,那么它已经被广泛滥用了,然后应该尽快修复... - A. Wolff
那我至少可以监听某些事件,比如点击或关闭窗口,然后调用我的函数并显示确认消息吗? - izdi
1个回答

9

beforeunload事件有点奇怪。大多数浏览器不允许你从处理程序中触发确认对话框,因为这会允许该网站不断弹出确认对话框而不是导航离开该页面。相反,你应该返回想要显示的消息,例如:

$(window).on('beforeunload', function(e) {
    var msg = 'You are about to leave the page.  Continue?';
    (e || window.event).returnValue = msg;  //IE + Gecko
    return msg;  //Webkit
});

如果你想在对话框关闭后运行其他JavaScript代码,请添加一个“onunload”监听器。
编辑:
正如评论中指出的那样,这些事件因浏览器而异。例如,最新版本的Gecko(Firefox)不允许自定义消息。

你确定那会起作用吗?另外请注意,代码末尾存在语法错误。这是代码片段来源的文档页面(使用window.addEventListener):https://developer.mozilla.org/en-US/docs/Web/Reference/Events/beforeunload - Jared Farrish
onunloadonbeforeunload在不同的浏览器中可能会有不一致的行为,例如,火狐浏览器不允许自定义消息(最新版本?)并且可能无法触发onunload事件(Opera浏览器?)。现在重新阅读原帖的问题,我认为这个回答解决了问题。+1 - A. Wolff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接