在我的GWT应用程序中,我想通过输入URL或关闭浏览器,在用户导航出当前应用程序即。时询问用户确认。这通常通过注册ClosingHandler
并在onWindowClosing
方法中设置所需的对话框消息来完成。这似乎运作良好。
但是,如果用户尝试导航到http://www.gmail.com
(通过在网址栏中输入)并点击取消以表示他不想导航,那么我的应用继续运行但浏览器的URL栏一直显示http://www.gmail.com
。这会在我的应用程序中导致许多问题,如果用户为该页面添加书签,则会给出错误的结果。
当用户按取消时,是否有办法自动重置网址?
或者,有没有办法检测用户按下取消按钮?如果是这样,有没有办法设置网址而不会触发ValueChangeEvent
? (我可以添加一些逻辑来防止这种情况,但如果它存在,我宁愿使用内置机制。)
答案 0 :(得分:3)
不确定这是否有效,但您是否尝试:History.newItem(History.getToken(), false);
重置网址?它会设置历史记录而不会触发新的历史记录项。
答案 1 :(得分:1)
我设法做到了这一点。看起来GWT DeferredCommand在确认窗口关闭后执行。结合希尔布兰德的上述答案,这正是我想要的。这正是我的所作所为:
public final void onWindowClosing(Window.ClosingEvent event) {
event.setMessage(onLeaveQuestion);
DeferredCommand.addCommand( new Command() {
public void execute() {
Window.Location.replace(currentLocation);
}
});
}
每次历史记录标记更改时,通过调用currentLocation
获取Window.Location.getHref()
。
答案 2 :(得分:0)
我通过创建自定义PlaceController并替换url中的标记来解决这个问题。不是一个理想的解决方案,但它有效!
if (warning == null || Window.confirm(warning)) {
where = newPlace;
eventBus.fireEvent(new PlaceChangeEvent(newPlace));
currentToken = History.getToken();
} else {
// update the url when user clicks cancel in confirm popup.
History.replaceItem(currentToken, false);
}