web-dev-qa-db-ja.com

Javascript:アンカータグを使用してサイトを本当にリロードする方法は?

たとえば、次のコードスニペットを見てください。

window.location.href = 'mysite.htm#images';

すでにサイトにいるmysite.htmとリロードのトリガーlocation.hrefはページをリロードしませんが、URL内で指定されたアンカーにジャンプします。

本当にページをリロードするメカニズムが必要です。何か案は?

PS:私は場所の他の方法を試しましたが、どれもトリックをしません:(

[〜#〜]編集[〜#〜]
ファイルタイプhtmでハングアップしないでください。動的なサイトにも必要です。

29
aefxx

指定されたURLを場所に設定した後、window.location.reload(true)を発行します。これにより、ブラウザは強制的にページをリロードします。

56
alemjerus

uRLのクエリ部分を使用して、ランダムな文字列を追加します。

// Use a timestamp to make sure the page is always reloaded
window.location.href = 'mysite.htm?r='+(+new Date())+'#images';
8
Andy E

Alemjerusの答えは良い方向にあると感じていますが、それは新しいURLが別のページを指している場合は機能しません、少なくとも私のChrome v40。

例:新しいURLがアンカーを追加するだけの場合、正常に機能します。

var redirectToURL = '/questions/2319004/javascript-how-to-truly-reload-a-site-with-an-anchor-tag#answer-28621360';
window.location.href = redirectToURL;
window.location.reload(true);

ただし、別のページを指している場合、ユーザーはリロード後も現在のページにとどまります。 (次のコードをバッチで実行します。location.href=およびlocation.reload):

var redirectToURL = 'http://stackoverflow.com';
window.location.href = redirectToURL;
window.location.reload(true);

この場合、location.reload機能します。したがって、私の回避策は、新しいURLが同じページにあるかどうかを確認することです。

var urlParser = document.createElement('a');
urlParser.href = redirectToURL;
if (urlParser.Origin + urlParser.pathname === location.Origin + location.pathname) {
    window.location.reload(true);
}

ChromeおよびSafariでテスト済み、IEを試していません。主要なブラウザで動作しない場合は、どうぞお知らせください。

4
ZZY

あなたは詐欺師になり、ランダム化されたクエリ文字列を追加して、「mysite.htm?random = 289954034#images」にリダイレクトすることができます。

しかし、これが静的ページの場合、.htmを意味します。何のためにリロードする必要がありますか?オンロードJavascriptが2回目に発生する可能性がある場合は、アプリケーションのフローを変更する必要があるだけかもしれません。

3
Matchu

これを試して: window.location.href = 'mysite.htm?';

編集:これは初めてのみ機能します。その後、キャッシングが再び有効になります。

1
Cameron