我正在研究应该是一个简单的Greasemonkey脚本,以确认如果您输入了冗长的消息,则要关闭窗口。
几年前我有一个这个脚本的工作版本,但它工作的网站已经发生了变化,所以我希望能解决它。但是,我甚至无法得到一个简单的确认工作:
function confirmClose() {
return 'You have a long message typed. Are you sure you want to close?';
}
window.addEventListener('beforeunload', confirmClose, true);
我很肯定脚本在它应该的页面上运行,但每当我试图关闭窗口时,我都没有收到任何确认。
答案 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 ();
}
这会抛出不可改变的对话框:
如果您想显示自定义消息,可以使用 额外 对话框执行此操作,如下所示:
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 ();
}
}
但请注意两个重要的烦恼:
如果用户按确定,则页面将退出,不再有任何问题。
但是,如果用户按取消,则会弹出您确定对话框,用户仍然必须按保持在页面。
根据HTML5规范,future versions of Firefox might stop allowing confirm()
during beforeunload
events.