Java 禁止用户在浏览器的“后退”按钮中更改URL

Java 禁止用户在浏览器的“后退”按钮中更改URL,java,javascript,gwt,browser,Java,Javascript,Gwt,Browser,目标:他们是我的Web应用程序中的可编辑表单。如果表单处于可编辑模式,我想在页面更改时向用户提供确认导航弹出窗口,以便保存表单的数据 问题:如果表单处于可编辑模式,并且用户点击正文上的“导航后退”按钮或退格,则webapplication将移动到上一历史页面,而不进行任何确认导航 我能够分别提供确认重新加载和确认重新加载时关闭和窗口关闭事件 是他们阻止用户更改url以防止表单数据丢失的任何方法 注意:只能使用JAVA、GWT和JAVASCRIPT。请参阅 您可能应该使用javascript来实现

目标:他们是我的Web应用程序中的可编辑表单。如果表单处于可编辑模式,我想在页面更改时向用户提供确认导航弹出窗口,以便保存表单的数据

问题:如果表单处于可编辑模式,并且用户点击正文上的“导航后退”按钮或退格,则webapplication将移动到上一历史页面,而不进行任何确认导航

我能够分别提供确认重新加载和确认重新加载时关闭和窗口关闭事件

是他们阻止用户更改url以防止表单数据丢失的任何方法

注意:只能使用JAVA、GWT和JAVASCRIPT。

请参阅


您可能应该使用javascript来实现这一点;您希望通过javascript侦听某些窗口事件,然后在这些事件发生时触发回调以弹出“确认导航”提示。

您无法阻止URL更改,但可以对更改做出反应并提示用户

如果您直接使用
com.google.gwt.user.client.History
,这有点复杂,因为您必须存储一些全局状态,这些状态将由历史记录的
ValueChangeHandler
使用。您还必须注册一个
窗口。ClosingHandler
并在事件中调用
setMessage
,以防用户退出您的应用程序(导航离开或关闭窗口/选项卡)

使用place时更容易,因为有一个
PlaceChangeRequestEvent
被调度。如果您在其上调用
setWarning
,则会提示用户是否要导航,并且只有在用户接受时才会调度
placechangeent
(请记住:在使用浏览器的“后退”按钮时,URL仍将更改,因此在下次导航之前,当前位置和当前URL之间将不同步。)位置会考虑卸载应用程序,因此您没有什么特殊的事情要做

如果您正在使用活动,则在调度
PlaceChangeRequestEvent
时会调用
活动的
可能停止
,如果非空,则返回的值将设置为事件的消息

如果您想了解无法阻止URL更改的原因的详细信息,请参阅:


(注意:您可以覆盖URL,但这样会丢失“转发历史记录”,可能会惹恼用户)

如果您使用的是“活动和地点”设计模式,则每个活动都有一个方法mayStop()。如果它返回null,则当用户移动到其他地点时,不会询问确认

您可以在此方法中添加检查,查看视图是否处于编辑模式,如果处于编辑模式,则返回警告消息文本

如果您没有为演示者使用“活动”,则应向入口点类中的历史对象添加ValueChangeHandler,如下所述:


上面的代码只适用于简单的HTML页面,在URL中有标签的GWT应用程序中不起作用。上面的代码只适用于我的应用程序中的F5按钮。例如,我的URL是:www.example.com/#profile,另一个相关的参考:--但要记住的是URL片段(“profile”)不是位置的一部分。通常,当javascript中的window.location更改时,您会尝试拦截。但是如果片段更改,则窗口位置不会更改。请查看