【问题标题】: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#

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

【问题讨论】:

    标签: java javascript html gwt gwt-history


    【解决方案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 中无效,我正在检查解决方案并返回
      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多