java - quitar - GWT. Eliminar la URL de la parte de anclaje
google web toolkit español (4)
Hola, estoy usando GWT y su forma estándar de apoyar el historial a través de la clase "Historia". Es muy conveniente, pero ¿cómo puedo eliminar la parte de ancla de una url? Por ejemplo:
Mi url base:
http://www.mysuperwebsite.com/myapp
Mientras uso la aplicación me muevo a un lugar que agrega un nuevo elemento de historia.
En codigo:
History.newItem("funnygame");
Como resultado:
http://www.mysuperwebsite.com/myapp#funnygame
Cambio de lugar una vez más:
En codigo:
History.newItem("notsofunnygames");
Como resultado:
http://www.mysuperwebsite.com/myapp#notsofunnygames
Luego quiero volver a mi página de inicio (http://www.mysuperwebsite.com/myapp).
¿Qué se debe colocar en el código ?:
????
para volver a:
http://www.mysuperwebsite.com/myapp
¿Hay alguna manera estándar de lograr mi objetivo?
Si agrego algo como esto:
History.newItem("");
o
History.newItem(null);
la url se convertirá
http://www.mysuperwebsite.com/myapp#
Y esto no es para lo que estoy pidiendo, lo necesito sin carácter agudo.
El delimitador se identifica con un #
, por lo que puede usar lo siguiente para eliminarlo:
int index = link.indexOf(''#'');
if (index != -1) {
link = link.substring(0, index);
}
Si usa History.newItem(null);
un nuevo evento será despedido. Como resultado, alternará su página de inicio: http://www.mysuperwebsite.com/myapp#
Tener o no un # al final es lo mismo, ¿me equivoco?
EDITAR:
...
// Get the last part of the url and remove #token
String s = Location.getHref().substring(Location.getHref().lastIndexOf("/"));
s = s.substring(0, s.indexOf("#")-1);
setToken(s);
...
protected native void setToken(String token) /*-{
$wnd.history.pushState({},'''', token);
}-*/;
Si no quieres un historial, probablemente estés usando el historial incorrecto. Si no tiene la intención de jugar con la navegación, le recomendaría usar GwtEvent / EventHandler. Que es esencialmente lo que hace la clase de Historia de gwt, además de vincular esos eventos al historial de navegación.
Puede crear una clase de herramienta y llamarla cuando el Historial cambie.
public class UrlUpdater {
public static void removeHashIfEmpty() {
if(isHashEmpty())
removeHash();
}
private static boolean isHashEmpty() {
return "#".equals(Window.Location.getHash());
}
private static void removeHash() {
updateURLWithoutReloading(Window.Location.createUrlBuilder().setHash(null).buildString());
}
private static native void updateURLWithoutReloading(String newUrl) /*-{
$wnd.history.replaceState({}, null, newUrl);
}-*/;
}