30

にアクセスstackoverflow.com/#_=_してwindow.location.hash評価し#_=_ます。罰金。

実行window.location.hash = ''してハッシュをクリアすると、URL は になりstackoverflow.com/#ます。(末尾の に注意してください#。)

#window.location.hash矛盾して含まれたり除外されたりするのはなぜですか? #ページをリロードせずに URL から削除するにはどうすればよいですか?

MDNは言う

[ハッシュは] # 記号を含む、# 記号に続く URL の部分です。

ただし、空のハッシュの場合はそうではありません。)

4

3 に答える 3

57

2 番目の質問に答えるには (#ページを更新せずに を削除する):

history.pushState('', document.title, window.location.pathname);
于 2013-03-10T14:19:26.707 に答える
4

最初の質問への回答:

Mozilla.orgのwindow.location docによると、「# 記号を含む、# 記号に続く URL の部分。URL に # が含まれていない場合、または # の後に何もない場合は空の文字列。 "

興味深いことに、そのドキュメントは 2013 年 4 月 8 日に更新されたばかりです。ドキュメントを確認した後に追加されたかどうかはわかりません。

ちなみに(そして回答を参照して)、window.location.hashとpushStateは密接に関連していますが異なる概念です。

于 2013-04-09T18:48:27.597 に答える
0

この動作には 2 つの要因があります。

  • 「ハッシュ プロパティを設定すると、ドキュメントをリロードせずに名前付きアンカーに移動します。」(ここ)
  • 「場所オブジェクトまたはハッシュを除くそのプロパティのいずれかを設定する場合[...] JavaScript 1.1 以降では、場所を設定する効果は、ネットワークを介してドキュメントを元のドキュメントと比較するためのユーザーの設定に依存します。」(ここ)

したがって、基本的に、ハッシュ プロパティを設定してもリロードが発生することはありません。他のプロパティを設定すると、リロードが発生するはずです (または、ブラウザの設定によっては、E-Tag/modified-since ヘッダー チェックが行われる可能性があります)。

一貫性を保つために、ブラウザー ビルダーは空のハッシュの設定を変換して、ハッシュとして「#」を設定すると仮定します。このようにして、ロケーション バーの URL はリロードにつながりません。しかし、この後半部分は純粋な憶測です。

于 2013-03-10T14:04:18.217 に答える