GWT. Удалить анкерную часть URL - PullRequest
7 голосов
/ 31 января 2011

Привет! Я использую GWT и его стандартный способ поддержки истории через класс «History». Это очень удобно, но как удалить анкерную часть из 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#

И это не то, что я ищу, мне нужно это без острого характера.

Ответы [ 4 ]

5 голосов
/ 31 января 2011

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

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

РЕДАКТИРОВАНИЕ:

  ...
  // 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);
}-*/;
2 голосов
/ 31 января 2011

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

int index = link.indexOf('#');
if (index != -1) {
    link = link.substring(0, index);
}
0 голосов
/ 22 июня 2016

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

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 голосов
/ 01 февраля 2011

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

...