programing

기록에 영향을 미치지 않고 해시 탐색을 사용할 수 있습니까?

skycolor 2023. 8. 30. 21:31
반응형

기록에 영향을 미치지 않고 해시 탐색을 사용할 수 있습니까?

죄송하지만 브라우저 기록에 항목을 남기지 않고 다시 로드하지 않고 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()는 history.pushState()와 정확히 동일하게 작동하지만 replaceState()는 새 기록 항목을 만드는 대신 현재 기록 항목을 수정합니다.

잊지 말고 보관하십시오.#그렇지 않으면 URL의 마지막 부분이 변경됩니다.

location.replace("#hash_value_here"); 

위의 것들은 당신이 원하는 것을 하는 것처럼 보입니다.

편집: 이제 몇 년이 지났고 브라우저는 발전했습니다.

@Luxiyalu의 대답은 가는 길입니다.

오래된 답--

저도 (지금은) 불가능하다고 생각합니다.그런데 사용하지 않을 거라면 왜 해시 값을 변경해야 합니까?

프로그래머로서 해시 값을 사용하는 주된 이유는 사용자가 페이지를 즐겨찾기에 추가하거나 브라우저 기록에 상태를 저장하기 위해서라고 생각합니다.이 작업을 수행하지 않으려면 변수에 상태를 저장하고 작업을 수행합니다.

해시를 사용하는 이유는 우리가 통제할 수 없는 값으로 작업하기 위해서라고 생각합니다.만약 당신이 그것이 필요하지 않다면, 그것은 아마도 당신이 통제할 수 있는 모든 것을 가지고 있다는 것을 의미할 것입니다. 그러니 그냥 상태를 변수에 저장하고 그것으로 작업하세요. (나는 반복하는 것을 좋아합니다.)

이것이 당신에게 도움이 되길 바랍니다.어쩌면 당신의 문제에 대한 더 쉬운 해결책이 있을지도 모릅니다.

업데이트: 다음은 어떻습니까?

  1. 첫 번째 해시를 설정하고 해당 해시가 브라우저 기록에 저장되는지 확인합니다.
  2. 새 탭을 선택하면 다음 작업을 수행합니다.window.history.back(1)당신의 첫 번째 init 해시에서 역사를 되돌리게 할 것입니다.
  3. 이제 새 해시를 설정하면 탭핑은 기록에 하나의 항목만 만듭니다.

되돌아가서 현재 항목을 "삭제"할 수 있는지 또는 첫 번째 단계를 건너뛰는지 확인하려면 플래그를 사용해야 합니다.그리고 이 "에 방법이 되지 않도록 하기 , "해쉬"에 대한 로딩 방법을 때, "에 로딩 방법이 실행되지 .history.back.

언제든지 이벤트 수신기를 생성하여 하이퍼링크 및 콜백 함수 put.proventDefault()에서 클릭 이벤트를 포착할 수 있습니다. 이 경우 브라우저가 기록에 이벤트를 삽입할 수 없습니다.

언급URL : https://stackoverflow.com/questions/2305069/can-you-use-hash-navigation-without-affecting-history

반응형