Is there a way to disable the Back button in a browser (basically clearing the History token stack) in GWT? Once I browse to a certain page in my application I want to make sure that the user can't use the back button to go back, but only be able to use links on the page to navigate the site.
-
6If you have to disable the back button, you're doing it wrong. Well-written Ajax toolkits are designed to handle the back button correctly (so that they will call your application's callbacks---with the same effect as clicking your navigational links). – C. K. Young Mar 05 '10 at 18:20
-
1There is a lot of duplicates about this : http://stackoverflow.com/questions/1864706/disable-back-button/1864709#1864709, http://stackoverflow.com/questions/961188/disable-browsers-back-button – Michael B. Mar 05 '10 at 18:21
-
@Michael: Yep, and still with the basic message of "don't"---as it should be. :-) @OP: See http://www.useit.com/alertbox/990530.html, item 1. – C. K. Young Mar 05 '10 at 18:24
5 Answers
You cannot disable a button just intercept it and change its return to something the browser does not understand.
This removes the history:
Window.addWindowClosingHandler(new ClosingHandler() {
@Override
public void onWindowClosing(ClosingEvent event) {
event.setMessage("My program");
}
});
To understand it see: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/8b2a7ddad5a47af8/154ec7934eb6be42?lnk=gst&q=disable+back+button#154ec7934eb6be42
However, I would recommend not doing this because your it goes against good UI practices. Instead you should figure out a way that the back button does not cause a problem with your code.

- 10,969
- 10
- 47
- 65
Call the method below in the 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
}
}
}
});
}

- 15,044
- 7
- 62
- 88
I found a way to make GWT ignore the back-button: Just add historyitem x if no historyitem was set and do nothing on x.
set a historyitem on startup
History.newItem("x")
in the ValueChangeHandler of History add the following:
String historyToken = event.getValue(); if (!historyToken.equals("x")) History.newItem("x");

- 6,356
- 3
- 60
- 69

- 11
- 1
Window.addWindowClosingHandler(new ClosingHandler() {
@Override
public void onWindowClosing(ClosingEvent event) {
event.setMessage("My program");
}
});
That is not a fool proof solution. In fire fox I can press the back button and the onWindowClosing
method is never invoked. The reason is that I have used History.newItem()
and since history exists the back button or backspace buttons simply navigate through the browser history.
So....fix that :)
Put this in your index.html
file:
window.open('html page(For example trial.html)', 'Name of the desired site', width='whatever you want',height='whatever you want', centerscreen=yes, menubar=no,toolbar=no,location=no,
personalbar=no, directories=no,status=no, resizable=yes, dependent=no, titlebar=no,dialog=no');

- 8,008
- 26
- 77
- 177

- 7,398
- 11
- 54
- 74