阻止用户在后退按钮上更改浏览器中的URL

时间:2014-04-09 12:33:18

标签: java javascript gwt browser

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

问题:如果表单处于可编辑模式且用户点击主体上的导航后退按钮或退格键,则网络应用程序将移至上一个历史记录页面而不进行任何确认导航。

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

他们是否有办法阻止用户更改网址,以防止数据丢失。

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

3 个答案:

答案 0 :(得分:1)

如果您使用的是活动和场所设计模式,那么每个Activity都会附带一个方法mayStop()。如果它返回null,则当用户移动到其他位置时不会询问确认。

您可以对此方法添加一项检查,以查看View是否处于编辑模式,如果是,则返回警告消息的文本。

如果您没有为演示者使用Activity,则应将ValueChangeHandler添加到入口点类的History对象中,如下所述:

http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html

答案 1 :(得分:0)

请参阅this related question on StackOverflow

您应该使用javascript来执行此操作;您希望通过javascript侦听某些窗口事件,然后触发回调以在发生这些事件时弹出“确认导航”提示。

答案 2 :(得分:0)

您无法阻止更改网址,但您可以对更改作出反应并提示用户。

如果您直接使用com.google.gwt.user.client.History,它有点复杂,因为您必须存储一些将由您的历史记录ValueChangeHandler使用的全局状态。您还必须在活动中注册Window.ClosingHandler并致电setMessage,以便用户退出您的应用程序(导航或关闭窗口/标签页)。

使用地方时会更容易,因为有PlaceChangeRequestEvent被派遣。如果您在其上调用setWarning,则系统会提示用户是否要导航,只有在他接受的情况下才会调度PlaceChangeEvent(请记住:使用浏览器时,网址仍会更改& #39; s后退按钮,因此当前位置与当前URL之间将不同步...直到下一个导航)。 地方会考虑卸载您的应用,因此您没有什么特别的事情要做。

如果您正在使用活动,则在调度Activity时会调用mayStop' PlaceChangeRequestEvent,并且如果非空,则返回的值被设置为事件的消息。

如果您想了解更多有关无法阻止更改网址的详细信息,请参阅:https://code.google.com/p/google-web-toolkit/issues/detail?id=6726

(注意:你可以覆盖网址,但是你会失去"转发历史记录",并且可能会让用户烦恼)