1. ホーム
  2. javascript

[解決済み] 履歴に影響を与えずにハッシュナビゲーションを使用することはできますか?

2022-12-17 23:41:53

質問

もしかしたら 不可能 のハッシュ値を変更する方法はありますか? をブラウザの履歴に残すことなく変更する方法はありますか? 再読み込みせずに ? または同等のことをする?

具体的な話としては、基本的なハッシュナビゲーションのようなものを開発していたのですが、それに沿って

//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の最後の部分が変更されてしまいます。