web-dev-qa-db-ja.com

ブラウザの[戻る]ボタンからアクセスしたときにサイトをリロードします

問題:動的コンテンツを含むサイトがあり、ユーザーが表示するたびにリロードする必要があります。これには、ユーザーが別のサイトの戻るボタンを押して、リロードが必要なサイトにアクセスするユースケースが含まれます。ほとんどの(すべて?)ブラウザーは、このイベントの後にサイトを更新しません。

私の解決策(まったく機能していません): http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript

window.onbeforeunload = function () {
    // This function does nothing.  It won't spawn a confirmation dialog
    // But it will ensure that the page is not cached by the browser.
}

しかし、それでもページは更新されません。

希望する動作に影響を与える/ブロックできるアイデアはありますか?この問題に対する他の解決策の提案はそれぞれありますか?

編集:

以下を設定します。

Cache-Control   private, must-revalidate, max-age=0
Expires Sat, 26 Jul 1997 05:00:00 GMT
Pragma  no-cache

そして:

<meta name="cache-control" content="no-cache" />
<meta name="expires" content="0" />
<meta name="pragma" content="no-cache" />

まだ成功していません。

21
sorgenkind

「no」の値で、非表示のinputを更新インジケーターとして使用する必要があります。

<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」になります。ページに戻ると「yes」になり、JavaScriptコードが更新をトリガーします。

57
Ali Al-Naimi

さまざまなソリューションを試した後、JavaScriptナビゲーションタイミングAPIが戻るボタンとの相互作用を検出するのに最適であることがわかりました。

あなたがしなければならないのはこれだけです:

if(!!window.performance && window.performance.navigation.type == 2)
{
    window.location.reload();
}

そして、それはすべての主要なブラウザでうまく機能します: http://caniuse.com/#search=Navigation%20Timing%20API

ブラウザキャッシュからページが読み込まれていますか?

17
Hasan Akhtar

window.onpageshowイベントを使用して、ページがキャッシュから来ているかどうかをテストできます。

window.onpageshow = function (event) {
  if (event.persisted) {
    window.location.reload(); //reload page if it has been loaded from cache
  }
};

これには、以前の回答(IE11 +など)よりも最新のブラウザーが必要であることに注意してください。ブラウザのサポートの詳細については、 here を参照してください

2

これは私のために、drupal 7(php)で、ユーザーがログアウトするたびに、戻るボタンを押して特権ページにアクセスできます。ページが更新されると、彼はルーティングされます。彼は何もできないフロントページへ。

    <?php 
        //refresh the page after log-out and back button
        if (!user_is_logged_in())
        {

          print '<input type="hidden" id="refreshed" value="no">
                 <script type="text/javascript">
                  onload=function(){

                    var e=document.getElementById("refreshed");
                    if(e.value=="no")e.value="yes";
                    else{e.value="no";location.reload();}
                  }
                </script>';
        }
  ?>

誰かが投稿しました こちら :ありがとう。

1
bherto39

それは役立ちますか?

戻るボタンを押すとページをリロードします

または、メタタグを使用して、

<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache -->
<meta http-equiv="expires" content="0"> <!-- says that the cache expires 'now' -->
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any -->

確かではありませんが、メタが役立ちますが、テストできます。

0
Jashwant

カスタムモジュールでこのコードを使用できます。

<?php 
/**
 * Implements hook_init().
 */
function MY_MODULE_init() {
  drupal_add_http_header('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate, post-check=0, pre-check=0');
}
?>
0
mouhammed

解決策を見つけました:no-storeCache-Controlヘッダーに追加します。私はhttpヘッダーでそれをしましたが、メタタグでも動作すると思います。 ChromiumとFirefoxでテスト済み。

停止方法chromeキャッシュから

0
aditsu

これを試して :

header("Cache-Control: no-store, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

//過去の日付

0
jogee31