2011-01-31 6 views
7

Привет Я использую GWT и его стандартный способ поддержки истории через класс «История». Это очень удобно, но как я могу удалить анкерную часть из URL-адреса? Например:GWT. Удалить анкерную часть url

Моя база URL:

http://www.mysuperwebsite.com/myapp 

В то время как с помощью приложения Я двигаюсь к месту, которое добавляет новый элемент истории.

В коде:

History.newItem("funnygame"); 

В результате:

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

Я Изменить место еще раз:

В коде:

History.newItem("notsofunnygames"); 

В результате:

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

Затем я хочу вернуться на свою домашнюю страницу (http://www.mysuperwebsite.com/myapp).

Что следует размещать в коде ?:

???? 

, чтобы вернуться:

http://www.mysuperwebsite.com/myapp 

Есть ли стандартный способ, которым я могу достичь своей цели?


Если добавить что-то вроде этого:

History.newItem(""); 

или

History.newItem(null); 

URL-адрес станет

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

И это не то, что я lloking для, Мне это нужно без резкого характера.

ответ

5

Если вы используете History.newItem(null); новое событие будет срабатывать. В результате, вы будете переключать вашу домашнюю страницу: http://www.mysuperwebsite.com/myapp#

Наличие или нет # в конце концов, это то же самое, я не прав?

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

Спасибо за ваш ответ. Это первое решение, о котором можно подумать. Мне нужно это без «#». Я уточню свой вопрос. – Zalivaka

+0

Пустой/myapp # фрагмент не будет иметь никакого эффекта, он будет таким же, как и/myapp всеми способами. –

+0

Это то же самое, когда мы пытаемся получить от него имена мест, но в строке местоположения он выглядит иначе. – Zalivaka

2

Якорь идентифицируется #, так что вы можете использовать следующее, чтобы удалить его:

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

Спасибо за ваш ответ. Но ты меня не понял. Я уточнил свой вопрос, чтобы быть более ясным. – Zalivaka

+0

Вы пробовали 'History.back()'? – dogbane

+0

Это не подходит, потому что я представил очень простой пример, хотя в действительности он намного сложнее. Много мест можно просмотреть, прежде чем мне нужно вернуться к домашнему виду. – Zalivaka

0

Если вы не хотите historytoken вы, вероятно, используя историю неправильно. Если вы не собираетесь играть с навигацией, я бы рекомендовал использовать GwtEvent/EventHandler.Это, по сути, то, что делает класс истории gwt, помимо связывания этих событий с историей навигации.

0

Вы можете создать класс инструмента, и вы вызываете его при изменении History.

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

Он работает в firefox, но не в хром, я проверяю решение и возвращаюсь –

Смежные вопросы