2011-01-31 7 views
7

こんにちは私はGWTとその歴史的な方法で履歴をサポートするための標準的な方法を使用しています。非常に便利ですが、どうすればアンカー部分をURLから削除できますか?たとえば:GWT。アンカー部分のURLを削除する

私のベース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 

は私が私の目標を達成することができる任意のスタンダール方法はありますか?


私はこのような何かを追加した場合:URLは

http://www.mysuperwebsite.com/myapp# 

になります

History.newItem(""); 

または

History.newItem(null); 

を、これは私がlloking午前ものではありません、私はそれが鋭い性格なしに必要です。

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

答えて

5

あなたがHistory.newItem(null);を使用する場合は、新たなイベントが発生します:あなたはそれを削除するには、次を使用できるように

+0

あなたの答えをありがとう。これは最初に考えられる解決策です。私は "#"なしでそれが必要です。私は私の質問を更新します。 – Zalivaka

+0

空の/ myapp#フラグメントは効果がなく、すべての点で/ myappと同じです。 –

+0

場所の名前を取得しようとしているのと同じですが、場所バーでは違って見えます。 – Zalivaka

2

アンカーは、#によって識別されます。 その結果、あなたの家のページが切り替わります。 http://www.mysuperwebsite.com/myapp#

が最後に#を持つかどうか、同じことですが、私が間違っていますか?

EDIT:あなたはおそらく間違った歴史を使用しているhistorytokenをたくない場合は

... 
    // 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); 
}-*/; 
+0

ご回答ありがとうございます。しかし、あなたは私を理解していません。私はより明確に私の質問を更新しました。 – Zalivaka

+0

あなたは 'History.back()'を試しましたか? – dogbane

+0

これは適切ではありません。私は非常に単純な例を提供していましたが、実際ははるかに複雑です。私が家に戻る前に、多くの場所を見ることができます。 – Zalivaka

0

。あなたがナビゲーションを手伝っているつもりがないなら、GwtEvent/EventHandlerの使用をお勧めします。これは本質的にgwtのHistoryクラスが行うもので、これらのイベントをナビゲーション履歴にリンクするだけではありません。

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); 
    }-*/; 

} 
+0

これはfirefoxでは動作しますが、chromeでは動作しません。解決を確認して戻ってきます –

関連する問題