您好我正在使用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#
这不是我喜欢的,我需要它没有尖锐的性格。
答案 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);
}-*/;
}