web-dev-qa-db-fra.com

Recharger le site une fois atteint via le bouton de retour des navigateurs

Problème: mon site contient du contenu dynamique qui doit être rechargé à chaque fois que l'utilisateur le voit. Cela inclut le cas d'utilisation lorsqu'un utilisateur appuie sur le bouton Précédent sur un autre site et se rend sur le site qui doit être rechargé. La plupart des navigateurs (tous?) N'actualisent pas le site après cet événement.

Ma solution (qui ne fonctionne pas très bien): 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.
}

Mais cela n’actualise toujours pas la page.

Des idées qui peuvent affecter/bloquer le comportement souhaité? Respectivement, toute autre solution suggérée à ce problème?

modifier:

Set suivant:

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

et:

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

toujours pas de succès.

19
sorgenkind

Vous devez utiliser une variable input masquée comme indicateur d'actualisation, avec la valeur "non":

<input type="hidden" id="refresh" value="no">

Maintenant, en utilisant jQuery, vous pouvez vérifier sa valeur:

$(document).ready(function(e) {
    var $input = $('#refresh');

    $input.val() == 'yes' ? location.reload(true) : $input.val('yes');
});

Lorsque vous cliquez sur le bouton Précédent, les valeurs des champs masqués conservent la même valeur que lorsque vous avez quitté la page.

Ainsi, la première fois que vous chargez la page, la valeur de l’entrée sera «non». Lorsque vous revenez à la page, ce sera "oui" et votre code JavaScript déclenchera une actualisation.

56
Ali Al-Naimi

Après avoir essayé différentes solutions, j'ai constaté que l'API JavaScript Navigation Timing était la solution idéale pour détecter les interactions avec le bouton Précédent.

Tout ce que vous avez à faire est ceci:

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

Et cela fonctionne bien avec tous les principaux navigateurs: http://caniuse.com/#search=Navigation%20Timing%20API

Ma page est-elle chargée à partir du cache du navigateur?

15
Hasan Akhtar

Vous pouvez utiliser l'événement window.onpageshow pour vérifier si la page provient du cache. 

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

Notez que cela nécessite des navigateurs plus modernes que certaines des réponses précédentes (telles que IE11 +). Pour plus d'informations sur le support du navigateur, voir ici

2
Rune Vejen Petersen

cela fonctionnait pour moi, dans drupal 7 (php), chaque fois qu'un utilisateur se déconnecte, il peut appuyer sur le bouton Précédent et accéder aux pages privilégiées. Si une page est actualisée, il est alors dirigé vers une page d'accueil où il ne peut rien faire.

    <?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>';
        }
  ?>

quelqu'un a posté ici : merci j'espère que cela vous aidera aussi.

1
bherto39

Aide-t-il ?

Recharger la page en appuyant sur le bouton retour

Ou avec des balises méta,

<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 -->

Pas sûr, la méta vous aidera, mais vous pouvez le tester.

0
Jashwant

Vous pouvez utiliser ce code dans un module personnalisé:

<?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

J'ai trouvé une solution: ajoutez no-store à l'en-tête Cache-Control. Je l'ai fait dans les en-têtes http, mais je suppose que cela pourrait également fonctionner avec les balises méta. Testé en chrome et Firefox.

Voir aussi Comment arrêter la mise en cache de chrome

0
aditsu

Essaye ça : 

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

// une date dans le passé

0
jogee31