GWT。删除锚点部分网址

时间:2011-01-31 10:18:35

标签: java javascript html gwt gwt-history

您好我正在使用GWT及其通过“历史”课程支持历史的标准方式。它非常方便,但如何从网址中删除锚点部分?例如:

我的基本网址:

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 个答案:

答案 0 :(得分: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);
}-*/;

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果你不想要历史记录,你可能会错误地使用历史。如果您不打算使用导航,我建议您使用GwtEvent / EventHandler。除了将这些事件链接到导航历史之外,这本质上是gwt的历史课程。

答案 3 :(得分: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);
    }-*/;

}