web-dev-qa-db-ja.com

window.location.href、window.location.replace、window.location.assignの違い

違いは何ですか

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

私は多くのフォーラムで、window.location.assign()が現在のセッション履歴を置き換えるだけであるため、ブラウザの戻るボタンが機能しないことを読みました。ただし、これを再現することはできません。

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>
103
milan_9211

これらは同じことをします:

window.location.assign(url);
window.location = url;
window.location.href = url;

新しいURLに移動するだけです。一方、replaceメソッドは、履歴に新しいレコードを追加せずにURLに移動します。

したがって、これらの多くの形式で読んだものは正しくありません。 assignメソッドは、新しいレコードを履歴に追加します。

リファレンス: http://developer.mozilla.org/en/window.location

146
Guffa

[戻る]ボタンを使用できないことに関する部分は、よくある誤解です。 window.location.replace(URL)は、新しいエントリで上書きすることにより、ページ履歴リストからtopONEエントリをスローします。特定の1つのWebページに簡単に戻ることはできません。この関数は、entireページ履歴リストを消去しません。また、戻るボタンを完全に機能しません。

(私が知っている機能やパラメータの組み合わせは、youが絶対に所有していない履歴リストのエントリを変更または上書きすることはできません-ブラウザは一般的にこれを無意味にしますページの履歴リストにあるtop以外のエントリにまったく影響を与える可能性のある操作をまったく定義しないことによるセキュリティの制限。そのような機能が存在する場合にマルウェアが行う可能性のある卑劣なこと。)

本当に「戻る」ボタンを機能しないようにしたい場合(「ユーザーフレンドリー」ではない可能性があります。それがreallyしたいことをもう一度考えてください)、新しいウィンドウを「開く」。 (ない「戻る」ボタンも持たないポップアップを「開く」ことができます...しかし、最近ではポップアップはあまり人気がありません:-)ユーザーが何をしても問題なくページを表示したい場合(「ユーザーフレンドリー」が疑わしい場合)、window.onunloadハンドラーを設定します。 。

10
Chuck Kollars