总重量。删除锚部分网址

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 中无效,我正在检查解决方案并返回

以上是关于总重量。删除锚部分网址的主要内容,如果未能解决你的问题,请参考以下文章

第八章 贪心法

部分背包问题-贪心策略

NGINX:永久删除部分网址

.htaccess - 如何删除部分网址?

最优装载问题---贪心算法

10fabric node sdk1.4.8手工设置组织锚节点