2013-05-21 3 views
1

MyDomain.com에 두 페이지가 있습니다. MyDomain.com/ 및 MyDomain.com/Foo/Bar에서 볼 수있는 인덱스보기입니다. 각보기에는 다른보기에 대한 ajax 호출이 있으며 각보기는 HTML5 기록 API를 사용하여 상태를 푸시합니다.기록 API 및 도메인 수준 URL

문제 생성 단계가 있습니다 : (. 작품이 예상대로) MyDomain.com/에서

  • 시작을
  • 는 아약스 MyDomain.com/Foo/Bar/ 링크 (작품을 클릭 예상대로 기대하는 것은.)
  • MyDomain.com/ (작품에 아약스 링크를 클릭하십시오.)
  • 이제 MyDomain.com/Foo/Bar/

에 아약스 링크를 클릭합니다 URL은 MyDomain.com/으로 표시됩니다. Foo/Foo/Bar/

Foo Foo Bar가 필요하지 않습니다.

현재의 해결 방법은 "../../../"을 URL 앞에 추가하는 것입니다. 그러나 이것은 우아하고 단순하지 않습니다. 또 다른 옵션은 디렉토리 레벨을 계산하는 정규 표현식입니다.

History API를 사용하여 절대 URL을 얻는 더 좋은 방법이 있습니까?

function push(updateElementID, controller, action, url) 
{ 
    if (typeof url == "undefined") 
    { 
     url = "/" + controller + "/" + action; 
    } 
    var state = { 
     id: updateElementID, 
     controller: controller, 
     action: action 
    } 

    history.pushState(state, null, url); 
} 

답변

1
당신은 DOM의 HREF 요소의 기본 요소는 적어도 다음과 같은 경우에 ... 취소되어 있는지 확인 할 수 있습니다

, 그것은 나를 위해 작동 : 공유 레이아웃 페이지 (_layout.cshtml) 헤드 태그 내에서 다음을 배치하여 DOM 내에서 절대 URL을 재설정 : 당신의 포트 번호 및 출시에 교체 물론

<base id="htmldom" href="http://localhost:59805/"/> 

, 실제 도메인 이름으로 루트 URL을 교체.

이렇게하면 href 속성을 설정하거나 재설정하고 다른 모든 상대 URL에 대한 기본 URL을 지정합니다.

이렇게하면 뒤로 및 앞으로 단추 사이의 페이지에 보존 된 사용자 입력 데이터에 영향을 미칩니 까? 위의 경우에만 href 속성을 다시 설정하고 DOM의 다른 정보가 있어야하므로 괜찮을 것이라고 추측합니다.