总重量。删除锚部分网址
Posted
技术标签:
【中文标题】总重量。删除锚部分网址【英文标题】:GWT. Remove anchor part url 【发布时间】:2011-06-18 11:52:14 【问题描述】:您好,我正在使用 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#
这不是我想要的,我需要它没有尖锐的性格。
【问题讨论】:
【参考方案1】:如果您使用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);
-*/;
【讨论】:
感谢您的回答。这是人们会想到的第一个解决方案。我需要它没有“#”。我会更新我的问题。 空的 /myapp# 片段将不起作用,它在所有方面都与 /myapp 相同。 在我们尝试从中检索地名时是一样的,但在位置栏中看起来不同。 据我所知,删除 # 的唯一方法是替换 url 或循环返回,直到您到达您的家(没有 #)。我猜您不希望重新加载页面,也不希望循环返回(那将是愚蠢的)。我现在不知道... 您可以尝试使用 html5 中引入的 history.pushState 吗?查看我的答案编辑...【参考方案2】:锚点由#
标识,因此您可以使用以下方法将其删除:
int index = link.indexOf('#');
if (index != -1)
link = link.substring(0, index);
【讨论】:
感谢您的回答。但是你没有理解我。我已经更新了我的问题,以便更清楚。 不合适,因为我提供了一个非常简单的例子,而实际情况要复杂得多。在我需要返回主视图之前,可以查看很多地方。【参考方案3】:如果您不想要历史令牌,您可能使用了错误的历史。如果您不打算摆弄导航,我建议您使用 GwtEvent / EventHandler。除了将这些事件链接到导航历史记录之外,这基本上就是 gwt 的 History 类所做的。
【讨论】:
【参考方案4】:你可以创建一个工具类,当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);
-*/;
【讨论】:
它在 Firefox 中有效,但在 chrome 中无效,我正在检查解决方案并返回以上是关于总重量。删除锚部分网址的主要内容,如果未能解决你的问题,请参考以下文章