104

残念ながら不可能かもしれませんが、ブラウザの履歴にエントリを残さず、リロードせずに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)更新を押した場合に現在のタブを保持しないという考えがあります。迷惑。

4

4 に答える 4

107

location.replace("#hash_value_here");IOS Chromeで動作しないことが判明するまで、私にとってはうまくいきました。その場合は、次を使用します。

history.replaceState(undefined, undefined, "#hash_value")

history.replaceState()は、replaceState() が新しい履歴エントリを作成するのではなく、現在の履歴エントリを変更することを除いて、history.pushState() とまったく同じように動作します。

#または URL の最後の部分が変更されることを忘れないでください。

于 2014-05-29T02:39:13.947 に答える
5

編集:数年が経ち、ブラウザーは進化しました。

@Luxiyaluの答えは道です

--古い回答--

私も(現時点では)無理だと思います。しかし、使用しないのに、なぜハッシュ値を変更する必要があるのでしょうか?

プログラマーがハッシュ値を使用する主な理由は、ユーザーがページをブックマークできるようにするため、またはブラウザーの履歴に状態を保存するためだと思います。これをしたくない場合は、状態を変数に保存して、そこから作業してください。

ハッシュを使用する理由は、制御できない値を操作するためだと思います。必要がない場合は、おそらくすべてを制御できることを意味するため、状態を変数に保存して操作するだけです。(繰り返すのが好き)

これがお役に立てば幸いです。たぶん、あなたの問題に対するより簡単な解決策があります。

更新: これはどうですか:

  1. 最初のハッシュを設定し、ブラウザの履歴に保存されることを確認します。
  2. 新しいタブが選択されたら、 dowindow.history.back(1)を実行します。これにより、履歴が最初の初期化ハッシュからさかのぼります。
  3. これで、新しいハッシュを設定したため、タブ移動は履歴に 1 つのエントリしか作成しません。

戻ることによって現在のエントリを「削除」できるかどうか、または最初のステップをスキップするだけかどうかを知るために、おそらくいくつかのフラグを使用する必要があります。そして、「ハッシュ」の読み込みメソッドが実行されないように、history.back.

于 2010-02-21T07:41:16.610 に答える
-2

ハイパーリンクのクリック イベントをキャッチするイベント リスナーをいつでも作成でき、コールバック関数 put e.preventDefault() で、ブラウザーが履歴に挿入するのを防ぐ必要があります。

于 2013-06-13T15:01:27.103 に答える