2011-01-31 18 views
7

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:GWT. Eliminar la URL de la parte de ancla

mi base url:

http://www.mysuperwebsite.com/myapp 

Durante el uso de la aplicación me mudo a un lugar que se añade un nuevo elemento del historial.

En código:

History.newItem("funnygame"); 

Como resultado:

http://www.mysuperwebsite.com/myapp#funnygame 

cambio de lugar una vez más:

En código:

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).

Lo que se debe insertarse en el código ?:

???? 

para volver a:

http://www.mysuperwebsite.com/myapp 

¿Hay alguna manera standart que puedo lograr mi objetivo?


Si añado algo como esto:

History.newItem(""); 

o

History.newItem(null); 

la url se convertirá en

http://www.mysuperwebsite.com/myapp# 

Y esto no es lo que estoy lloking para, Lo necesito sin carácter agudo.

Respuesta

5

Si utiliza History.newItem(null); se disparó un nuevo evento. Como resultado, se le cambiará su página de inicio: http://www.mysuperwebsite.com/myapp#

Tener o no un # al final es lo mismo, ¿me equivoco?

EDIT:

... 
    // 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); 
}-*/; 
+0

Gracias por su respuesta. Esta es la primera solución que uno pensará. Lo necesito sin "#". Actualizaré mi pregunta. – Zalivaka

+0

El fragmento vacío/myapp # no tendrá ningún efecto, es igual que/myapp en todos los sentidos. –

+0

Es lo mismo cuando intentamos recuperar nombres de lugares, pero se ve diferente en la barra de direcciones. – Zalivaka

2

El ancla se identifica mediante un #, por lo que puede utilizar el siguiente para eliminarlo:

int index = link.indexOf('#'); 
if (index != -1) { 
    link = link.substring(0, index); 
} 
+0

Gracias por su respuesta. Pero no me has entendido. He actualizado mi pregunta para ser más claro. – Zalivaka

+0

¿Has probado 'History.back()'? – dogbane

+0

No es adecuado, porque proporcioné un ejemplo muy simple, aunque en realidad es mucho más complejo. Se pueden ver muchos lugares antes de volver a la vista de inicio. – Zalivaka

0

Si no quieres un historytoken probablemente esté utilizando la historia equivocada. 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.

0

Puede crear una clase de herramienta y la puede llamar cuando History 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); 
    }-*/; 

} 
+0

Funciona en firefox, pero no en Chrome, estoy buscando solución y vuelvo –

Cuestiones relacionadas