나는 그것이 될 수 두려워 불가능 하지만 URL의 해시 값을 변경하는 방법이 브라우저의 역사에서 항목을 떠나지 않고 및 다시로드하지 않고는 ? 아니면 동등합니까?
세부 사항에 관해서는 다음과 같은 몇 가지 기본 해시 탐색을 개발하고있었습니다.
//hash nav -- works with js-tabs
var getHash = window.location.hash;
var hashPref = "tab-";
function useHash(newHash) {
//set js-tab according to hash
newHash = newHash.replace('#'+hashPref, '');
$("#tabs li a[href='"+ newHash +"']").click();
}
function setHash(newHash) {
//set hash according to js-tab
window.location.hash = hashPref + newHash;
//THIS IS WHERE I would like to REPLACE the location.hash
//without a history entry
}
// ... a lot of irrelavent tabs js and then....
//make tabs work
$("#tabs.js-tabs a").live("click", function() {
var showMe = $(this).attr("href");
$(showMe).show();
setHash(showMe);
return false;
});
//hash nav on ready .. if hash exists, execute
if ( getHash ){
useHash(getHash);
}
분명히 jQuery를 사용합니다. 아이디어는 이 특정 인스턴스에서 1) 사용자가 모든 탭 변경 사항을 되 돌리게하면 불필요한 참조를 쌓아서 효과적으로 ‘뒤로 버튼을 해제’할 수 있으며, 2) 새로 고침을 누르면 현재 탭을 유지하지 않는 것이 좋습니다. 성가심.
답변
location.replace("#hash_value_here");
IOS Chrome에서 작동하지 않는다는 것을 알 때까지 잘 작동했습니다. 이 경우 다음을 사용하십시오.
history.replaceState(undefined, undefined, "#hash_value")
history.replaceState () 는 replaceState ()가 새 기록 항목을 만드는 대신 현재 기록 항목을 수정한다는 점을 제외하면 history.pushState ()와 똑같이 작동합니다.
#
또는 URL의 마지막 부분 을 유지하는 것을 잊지 마십시오 .
답변
location.replace("#hash_value_here");
위는 당신이 추구하는 것을하는 것 같습니다.
답변
편집 : 이제 몇 년이 지났고 브라우저가 진화했습니다.
@Luxiyalu의 대답 은 갈 길입니다.
– 이전 답변 –
저도 불가능하다고 생각합니다 (현재로서는). 하지만 해시 값을 사용하지 않을 경우 왜 변경해야합니까?
프로그래머로서 해시 값을 사용하는 주된 이유는 사용자가 페이지를 북마크하거나 브라우저 기록에 상태를 저장하도록하는 것입니다. 이 작업을 수행하지 않으려면 상태를 변수에 저장하고 거기에서 작업하십시오.
해시를 사용하는 이유는 우리가 통제 할 수없는 값으로 작업하기 때문이라고 생각합니다. 필요하지 않다면 아마도 모든 것이 당신의 통제하에 있다는 것을 의미 할 것이므로 변수에 상태를 저장하고 작업하십시오. (나는 반복하는 것을 좋아한다)
도움이 되었기를 바랍니다. 문제에 대한 더 쉬운 해결책이있을 수 있습니다.
업데이트 :
어때요?
- 첫 번째 해시를 설정하고 브라우저 기록에 저장되는지 확인합니다.
- 새 탭이 선택되면 수행
window.history.back(1)
하십시오. 그러면 첫 번째 init 해시에서 기록이 되돌아갑니다. - 이제 새 해시를 설정 했으므로 탭은 기록에 하나의 항목 만 만듭니다.
뒤로 돌아가서 현재 항목을 “삭제”할 수 있는지 또는 첫 번째 단계를 건너 뛰는 경우 몇 가지 플래그를 사용해야 할 것입니다. 그리고 .NET Framework를 강제 실행할 때 “해시”에 대한로드 메서드가 실행되지 않도록합니다 history.back
.
답변
하이퍼 링크에서 클릭 이벤트를 포착하기 위해 항상 이벤트 리스너를 만들고 콜백 함수에 e.preventDefault ()를 넣어 브라우저가 히스토리에 삽입하지 못하도록 할 수 있습니다.