当用户离开GWT应用程序时,我想打开一个确认对话框并为他们提供留下的选择,即确认(“你确定要离开这个页面”,“是”,“否”)
我知道如何构建拨号盒。 :)
问题是,如何捕获用户离开页面的事件以及如何取消它?
丹尼尔
答案 0 :(得分:16)
调用Window.addWindowClosingHandler,并在Window.ClosingEvent上传递一个调用setMessage的回调,如下所示:
Window.addWindowClosingHandler(new Window.ClosingHandler() {
public void onWindowClosing(Window.ClosingEvent closingEvent) {
closingEvent.setMessage("Do you really want to leave the page?");
}
});
(我已经添加了GWT 2.0文档的链接;在这些URL中将2.0更改为1.6以查看GWT 1.6 / 1.7文档。)
请注意,这样做,您不必自己创建对话框。
答案 1 :(得分:4)
您必须创建一个CloseHandler并在Window上注册它:
Window.addWindowClosingHandler(handler)
编辑:固定方法名称。请参阅评论和回答。
答案 2 :(得分:2)
在onModuleLoad()
。
private void setupHistory() {
final String initToken = History.getToken();
if (initToken.length() == 0) {
History.newItem("main");
}
// Add history listener
HandlerRegistration historyHandlerRegistration = History.addValueChangeHandler(new ValueChangeHandler() {
@Override
public void onValueChange(ValueChangeEvent event) {
String token = event.getValue();
if (initToken.equals(token)) {
History.newItem(initToken);
}
}
});
// Now that we've setup our listener, fire the initial history state.
History.fireCurrentHistoryState();
Window.addWindowClosingHandler(new ClosingHandler() {
boolean reloading = false;
@Override
public void onWindowClosing(ClosingEvent event) {
if (!reloading) {
String userAgent = Window.Navigator.getUserAgent();
if (userAgent.contains("MSIE")) {
if (!Window.confirm("Do you really want to exit?")) {
reloading = true;
Window.Location.reload(); // For IE
}
}
else {
event.setMessage("My App"); // For other browser
}
}
}
});
}