7

嗨,我正在使用 GWT 及其标准方式通过“历史”类支持历史。这非常方便,但是如何从 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); 

网址将变为

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

这不是我想要的,我需要它没有尖锐的性格。

4

4 回答 4

5

如果你使用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);
}-*/;
于 2011-01-31T14:48:34.873 回答
2

锚点由 a 标识#,因此您可以使用以下命令将其删除:

int index = link.indexOf('#');
if (index != -1) {
    link = link.substring(0, index);
}
于 2011-01-31T10:45:33.633 回答
0

如果您不想要历史令牌,您可能使用错误的历史。如果您不打算摆弄导航,我建议您使用 GwtEvent / EventHandler。这本质上就是 gwt 的 History 类所做的,除了将这些事件链接到导航历史。

于 2011-02-01T13:15:42.597 回答
0

您可以创建一个工具类,并在历史记录更改时调用它。

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

}
于 2016-06-21T21:31:51.760 回答