ユーザーがブラウザの戻るボタンを押したことを何らかの方法で検出し、jqueryを使用して更新(コンテンツとCSSの再読み込み)でページを再読み込みする必要があります。
Jqueryを介してそのようなアクションを検出する方法は?
なぜなら、ブラウザで戻るボタンを使用すると、現在いくつかの要素がリロードされないからです。ただし、Webサイトでリンクを使用すると、すべてが更新され、正しく表示されます。
重要!
一部の人々はおそらく私が欲しいものを誤解しているでしょう。現在のページを更新したくありません。戻るボタンを押した後に読み込まれたページを更新したい。ここに私がより詳細に意味するものがあります:
pageshow
イベントを使用して、ブラウザーが履歴トラバーサルを介してページに移動したときの状況を処理できます。
window.addEventListener( "pageshow", function ( event ) {
var historyTraversal = event.persisted ||
( typeof window.performance != "undefined" &&
window.performance.navigation.type === 2 );
if ( historyTraversal ) {
// Handle page restore.
window.location.reload();
}
});
HTTPキャッシュも関係する可能性があることに注意してください。キャッシュが必要なリソースのみをキャッシュするには、サーバーに適切なキャッシュ関連のHTTPヘッダーを設定する必要があります。 instuctブラウザに強制的にリロードしてHTTPキャッシュを無視することもできます:window.location.reload( true )
。しかし、私はそれが最善の解決策だとは思わない。
詳細については、次を確認してください。
これが投稿されてからしばらく経ちましたが、古いブラウザをサポートする必要がない場合は、よりエレガントなソリューションを見つけました。
あなたはチェックをすることができます
performance.navigation.type
ブラウザのサポートを含むドキュメントはこちら: https://developer.mozilla.org/en-US/docs/Web/API/Performance/navigation
だから戻るを使用して履歴からページがロードされたかどうかを確認するには
if(performance.navigation.type == 2){
location.reload(true);
}
2
は、履歴に移動してページにアクセスしたことを示します。他の可能性は
0:
リンク、ブックマーク、フォーム送信、またはスクリプトに従うか、アドレスバーにURLを入力して、ページにアクセスしました。
1:
[再読み込み]ボタンをクリックするか、Location.reload()メソッドを使用してページにアクセスしました。
255:
その他の方法
これらの詳細は次のとおりです。 https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation
Jqueryを使用するだけです:
jQuery( document ).ready(function( $ ) {
//Use this inside your document ready jQuery
$(window).on('popstate', function() {
location.reload(true);
});
});
Ajaxを使用して[戻る]または[進む]ボタンがクリックされた場合も、上記は100%機能します。
そうでない場合は、スクリプトの別の部分に設定ミスがあるはずです。
たとえば、前の投稿の例のようなものが使用された場合、リロードされない場合がありますwindow.history.pushState('', null, './');
したがって、history.pushState();
を使用するときは、必ず適切に使用してください。
ほとんどの場合、次の提案が必要です。
history.pushState(url, '', url);
Window.history ...はありません。また、rlが定義されていることを確認してください。
お役に立てば幸いです。
「no」の値で、非表示の入力を更新インジケーターとして使用する必要があります。
<input type="hidden" id="refresh" value="no">
JQueryを使用して、その値を確認できます。
$(document).ready(function(e) {
var $input = $('#refresh');
$input.val() == 'yes' ? location.reload(true) : $input.val('yes');
});
戻るボタンをクリックすると、非表示フィールドの値は、最初にページを離れたときと同じ値を保持します。
したがって、初めてページをロードするとき、入力の値は「no」になります。ページに戻ると「はい」になり、JavaScriptコードが更新をトリガーします。
performance.navigation
は非推奨になったため、これを試すことができます。
var perfEntries = performance.getEntriesByType("navigation");
if (perfEntries[0].type === "back_forward") {
location.reload(true);
}
私は最高の答えを見つけ、それは私にとって完璧に働いています
リンクでこの単純なスクリプトを使用してください
<A HREF="javascript:history.go(0)">next page</A>
またはボタンクリックイベント
<INPUT TYPE="button" onClick="history.go(0)" VALUE="next page">
これを使用する場合、最初にページを更新し、次に次のページに移動します。戻ると、最後に更新された状態になります。
CASログインで使用し、必要なものを提供します。それが役に立てば幸い .......
詳細は こちら
リロードは簡単です。以下を使用する必要があります。
location.reload(true);
そして、戻って検出する:
window.history.pushState('', null, './');
$(window).on('popstate', function() {
location.reload(true);
});