window.location.href = window.location.hrefとwindow.location.reload()の違い


196

JavaScriptの違いは何ですか

window.location.href = window.location.href

そして

window.location.reload()

関数?

回答:


247

私の記憶が正しければwindow.location.reload()、現在のページにPOSTデータをリロードしますが、POSTデータwindow.location.href=window.location.hrefは含まれません。

以下のコメントの@ W3Maxで注記されているようwindow.location.href=window.location.hrefに、URLにアンカー(#)がある場合はページをリロードしません- window.location.reload()この場合は使用する必要があります。

また、以下の@Micで説明されているように、ブラウザを使用してキャッシュをスキップし、サーバーからページをリロードするようにwindow.location.reload()、追加の引数を取ります。反対のことを行い、可能であればキャッシュからページをロードします。skipCachewindow.location.reload(true)window.location.reload(false)


11
POSTでwindow.location.reload()を使用すると、データを再送信してページをリロードするかどうかをブラウザから尋ねられることに注意してください
wimh

3
@Wimmel、このメッセージを無効にする方法はありますか?
Kris-I

40
URLにアンカー(#)がある場合、window.location.href = window.location.hrefはページをリロードしません-この場合、window.location.reload()を使用する必要があります。
W3Max、2012年

5
また、location.reload()は(ctrl + f5スタイルのハードリフレッシュと同じように)すべての静的コンテンツを強制的に再ロードしますが、location.hrefをhref(またはパス名またはURL)に設定することはそうではないことに注意してください。不要)一部のページでの読み込み時間の違い。
Rob Van Dam

2
@Wimmel Chrome:GET Firefoxでページをリロードします:前のリクエストを再実行します。つまり、POSTの場合、データを再送信するかどうかを尋ねる素晴らしいポップアップが表示されます
Juri

51

window.location.reload(true)ブラウザがキャッシュをスキップしてサーバーからページをリロードすると言う場合。window.location.reload(false)逆になります。

注:のdefaultwindow.location.reload()false


5
@Ismail-デフォルトはfalseです。
Trevor

2
Google Chrome 32、webRTCを使用している間、true / falseは機能しませんでした。私はwebRTCを備えたiframeを持っていて、それを使用するだけでwindow.location.href = window.location.hrefうまくいった。

ページ上のフォームに変更を加えた場合location.reload()またはを使用するときに、ブラウザによっては変更消える(キャッシュされた値に戻る)場合がありlocation.reload(false)ます。ページを完全に更新するには、を使用しますlocation.reload(true)
Suncat2000

32

違いは

window.location = document.URL;

URLにハッシュ(#)がある場合(その後に何かがあるかどうかにかかわらず)、ページはリロードされませんが、

window.location.reload();

ページをリロードします。


2
すべてのブラウザがこの問題を持っているわけではありません。ハッシュの終了が問題になる場合は、次のことを試してください。window.location = document.URL.replace(/#$ /、 '');
Walter Stabosz 2012

1
少なくともChromeは心配です。私location.href = location.hrefは当たり前のことと思っていましたが、その正確な振る舞いに気づき、広めるためにSOに来ました。location.reload()代わりに使用してください。
Pioul

1
このような正規表現を書く代わりにwindow.location.pathnameを使用することもできます。例:window.location.replace(window.location.pathname);
Arseny

20

リロードにブール値trueを追加すると、 window.location.reload(true)サーバーからロードされます。

このブール値がどのようにサポートされているかは明らかではありません、W3OrgはNS がサポートしていたと述べていますそれて

window.location.hrefとdocument.URLの内容に違いがあるかもしれません-少なくとも、location.hrefと非標準で非推奨のdocument.locationの違いがありました。リダイレクトに関連が、本当に最後の千年紀です。

ドキュメント化の目的で、私はwindow.location.reload()を使用します。


これが違いを説明しているので、stackoverflow.com / a / 5091619/429972を見てください。
jontro 2012

14

前述のように、URLにハッシュ(#)があるときにhrefを変更しても、ページはリロードされません。したがって、正規表現の代わりにこれを使用して再読み込みします。

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}

6

IE、特にIE9の異常な動作を調査しているこの質問に出くわして、古いバージョンはチェックされませんでした。そうみたいです

window.location.reload();

結果として、画面全体が1秒間空白になる更新が行われます。

 window.location = document.URL;

ページをはるかに速く、ほとんど気づかずに更新します。

もう少し調査を行い、フィドラーでいくつかの実験をwindow.location.reload()行います。ブール値を渡すかどうかに関係なく、キャッシュをバイパスしてサーバーからリロードします。これには、すべてのアセット(画像、スクリプト、スタイルシート、等)再び。したがって、ページでHTMLを更新するだけの場合は、window.location = document.URLがより速く、トラフィックが少なくなります。

ブラウザー間の動作の違いは、IE9がreloadメソッドを使用すると、表示されているページがクリアされ、一見して再構築されるようです。FFとChromeは、新しいアセットを取得するまで待機し、異なる場合は再構築します。


window.location = document.URLは、window.location.reload()と同じようにページをリロードします。トップにスクロールバックせずに、またはあなたが言ったように気付かずにリフレッシュするための最新技術はありますか?
bigmugcup

6

Firefox(12.0)の違いは、POSTからレンダリングされたページでは、reload()が警告をポップアップして再投稿し、URL割り当てはGETを行うことです。

Google Chromeは両方に対してGETを実行します。


1
Chrome 38は.reload()にPOSTを使用するようになりました。
Glen Little

3

JSFを使用して、セッションが期限切れになった後の更新で問題が発生していますページのリロード後のPrimeFaces ViewExpiredExceptionといくつかの調査により、FireFoxに1つの違いがあることがわかりました。

呼び出しwindow.location.reload()はFFの更新アイコンをクリックするように機能し、行を追加します

Cache-Control max-age=0

設定中 window.location.hrefはURL行でEnterキーを押すのと同じように機能しますが、その行は送信されません。

どちらもGETとして送信されますが、最初の(リロード)は前のデータを復元しており、アプリケーションは不整合な状態です。


1

いいえ、ありません。ただし、一部のブラウザーでは違いがある可能性があるため、どちらか(またはどちらも)が機能しない場合があります。


1

約3年の経験から、なんの違いも見当たりませんでした...

編集:はい、ここでそれらの1つが言ったように、window.location.reload()にブールパラメータを渡すことだけが違いです。trueを渡した場合、ブラウザは新しいページをロードしますが、falseの場合、キャッシュバージョンがロードされます...


0

私たちのケースでは、webviewでページをリロードしたいだけで、なぜか理由がわからなかったのです!私たちはウェブ上にあるほとんどすべてのソリューションを試しますが、location.reload()またはwindow.location.reload()、location.reload(true)などの代替ソリューションを使用してリロードしないで立ち往生しています...!

これが私たちの簡単な解決策です:

次のように、空の「href」属性値を持つ<a>タグを使用するだけです。

< a href="" ...>Click Me</a>

(場合によっては、ターゲットのクリックで「return true」を使用してリロードをトリガーする必要があります)

詳細については、この質問を確認してください: 空のhrefは有効ですか?


-3

window.location.href、これはAndroid 5.1からのwebviewで私の命を救いました。Androidからのこのバージョンでは、ページはlocation.reload()で再読み込みされません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.