当前位置: 首页 > 知识库问答 >
问题:

如何覆盖OnBeforeUnload对话框并将其替换为自己的对话框?

周峻
2023-03-14

我需要在用户离开页面之前警告他们未保存的更改(这是一个相当常见的问题)。

window.onbeforeunload = handler

这是可行的,但它引发了一个默认对话框,带有一个恼人的标准消息,包装了我自己的文本。我需要或者完全替换标准消息,这样我的文本就清晰了,或者(更好的是)用一个使用jQuery的模态对话框替换整个对话框。

到目前为止,我失败了,我还没有找到其他人似乎有答案。有可能吗?

我的页面中的Javascript:

<script type="text/javascript">   
    window.onbeforeunload = closeIt;
</script>

closeIt()函数:

function closeIt()
{
  if (changes == "true" || files == "true")
  {
      return "Here you can append a custom message to the default dialog.";
  }
}

使用jQuery和jqModal,我已经尝试过这种事情(使用自定义确认对话框):

$(window).beforeunload(function () {
    confirm('new message: ' + this.href + ' !', this.href);
    return false;
});

这也不起作用--我似乎无法绑定到beforeunload事件。

共有1个答案

陈斌蔚
2023-03-14

您不能修改OnBeforeUnload的默认对话,因此最好使用它。

window.onbeforeunload = function() {
    return 'You have unsaved changes!';
}

下面是Microsoft对此的参考:

将字符串分配给Window.Event的returnValue属性时,将出现一个对话框,使用户可以选择留在当前页上并保留分配给它的字符串。无法删除或更改对话框中出现的默认语句“是否确定要离开此页?...按”确定“继续,或按”取消“留在当前页。

问题似乎是:

  1. 调用OnBeforeUnload时,它将处理程序的返回值取为Window.Event.ReturnValue
  2. 然后将返回值解析为字符串(除非它为空)。
  3. 由于false被解析为字符串,对话框将触发,然后传递适当的true/false

结果是,似乎没有一种方法可以将false分配给onbeforeunload以防止它出现在默认对话中。

关于jQuery的其他注意事项:

>

  • 在jQuery中设置事件可能会有问题,因为这样也会发生其他OnBeforeUnload事件。如果您只希望卸载事件发生,我会坚持使用简单的OL'JavaScript。
  • jQuery没有OnBeforeUnload的快捷方式,因此必须使用通用的Bind语法。

    $(window).bind('beforeunload', function() {} );
    

    编辑09/04/2018:自chrome-51以来,不推荐使用onbeforeunload对话框中的自html" target="_blank">定义消息(参见:版本说明)

  •  类似资料:
    • 问题内容: 我需要在用户离开页面之前警告用户有关未保存的更改(这是一个非常常见的问题)。 这可以工作,但是会引发一个默认对话框,其中包含包装我自己的文本的刺激性标准消息。我需要完全替换标准消息,以使文本清晰,或者(甚至更好)使用jQuery将整个对话框替换为模式对话框。 到目前为止,我失败了,但是我还没有找到似乎有答案的其他人。可能吗 我页面中的Javascript: closeIt()函数: 我

    • 我在antoher的项目中有完全相同的代码,但它在这里继续崩溃。我有。我真的不确定问题出在哪里。我尝试过切换gradle版本,从切换到。不管怎样,一切都失败了

    • 我们可以覆盖页面离开确认对话框与自定义设计的对话框,如jquery UI对话框? 我试图将其实现为: var warning=true; var v_leavemsg=“确实要离开页面吗?”;Window.OnBeforeUnload=ConfirmExit; 函数confirmExit(){ if(warning){ //custom dialog函数调用 f_customdialog(v_le

    • 我希望在由Capybara旋转的Chrome实例中禁用从onbeforeunload生成的对话框。我有一个非常大的测试套件,修改每次访问/刷新以包含单击“离开”确认的代码是不切实际的。 我尝试在访问和刷新之前添加,虽然这是可行的,但它共享了必须修改所有访问和刷新调用的问题。 我还检查了是否有任何ChromeCLI选项可以添加来禁用此功能,但我没有找到任何相关内容。我检查了这里:https://pe

    • 对话框的内容不是在页面最初可见,而是在用户操作时显示额外的信息。 Toasts Materialize 提供了非常简单的方法,来弹出一些信息,同时也不会让用户感到突兀。这些 Toasts 显示的位置和大小会随着你的设备的不同而改变。 在 JavaScript 中调用 Materialize.toast() 方法来使用。 // Materialize.toast(message, displayLe

    • 对话框是一个现代GUI应用不可或缺的一部分。对话是两个人之间的交流,对话框就是人与电脑之间的对话。对话框用来输入数据,修改数据,修改应用设置等等。 输入文字 QInputDialog提供了一个简单方便的对话框,可以输入字符串,数字或列表。 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial In this