2011-01-31 4 views
7

안녕하세요 저는 GWT와 "역사"수업을 통해 역사를 지원하는 그 standart 방법을 사용하고 있습니다. 매우 편리하지만 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)로 돌아가고 싶습니다.

뒤로 얻을 코드?

???? 

에 배치해야 무엇

: 내 목표를 달성 할 수있는의 standart 방법이 있나요

http://www.mysuperwebsite.com/myapp 

?


나는 이런 식으로 뭔가 추가 할 경우 : URL이

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

될 것

History.newItem(""); 

또는

History.newItem(null); 

을 그리고 이것은 내가 위해 lloking하고 무엇을하지 않습니다, 날카로운 성격이 필요하지 않습니다. 당신이 History.newItem(null);를 사용하는 경우

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

답변

5

새로운 이벤트가 발생됩니다 : 당신이 그것을 제거하려면 다음을 사용할 수 있도록

+0

답변 해 주셔서 감사합니다. 이것이 첫 번째 해결책입니다. 나는 "#"없이 그것을 필요로한다. 나는 내 질문을 업데이트 할 것이다. – Zalivaka

+0

빈/myapp # 조각은 효과가 없으며 모든면에서/myapp와 동일합니다. –

+0

장소 이름을 검색하는 동안 동일하지만 위치 표시 줄에서 다르게 보입니다. – Zalivaka

2

앵커가하는 #으로 식별됩니다. 결과, 당신은 당신의 홈 페이지 전환됩니다 : http://www.mysuperwebsite.com/myapp#

가 마지막에 #을 갖는 여부 같은 일입니다, 내가 잘못입니까?

편집 : 당신은 아마 잘못된 역사를 사용됩니다 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에서는 작동하지만 크롬에서는 작동하지 않습니다. 해결책을 확인하고 다시 돌아옵니다. –

관련 문제