web-dev-qa-db-ja.com

URLハッシュをクリアする

stackoverflow.com/#_=_にアクセスすると、window.location.hash#_=_と評価されます。いいよ.

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

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

[〜#〜] mdn [〜#〜] は言う

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

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

30
Randomblue

2番目の質問に回答するには(#ページの更新なし):

history.pushState('', document.title, window.location.pathname);
56
Randomblue

最初の質問に答える:

Mozilla.orgの window.location doc によると: "#記号を含むURLの一部(ある場合は#記号を含む。)URLに#が含まれていないか、#の後に何もない場合は空の文字列。 "

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

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

4
ricardohdz

この動作を駆動する2つのことがあります。

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

したがって、基本的に、ハッシュプロパティを設定してもリロードは行われず、他のプロパティを設定してもリロード(またはブラウザの設定に応じてE-Tag/modified-sinceヘッダーチェック)が行われます。

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

0
Claude