web-dev-qa-db-fra.com

Comment rafraîchir la page en cliquant sur le bouton Retour?

J'utilise .htaccess pour acheminer tout mon trafic vers un seul fichier index.php. Le code ci-dessous dirige le trafic, mais pour une raison quelconque, il ne fonctionne pas avec le bouton de retour. Je ne sais pas quoi faire pour que le bouton de retour fonctionne. J'ai essayé une variété de choses et googlé un peu et rien n'a fonctionné, donc j'espère que quelqu'un ici peut aider!

<?php
   if(isset($_GET['parameters'])) {
      if($_GET['parameters'] == "repair")
         include 'repair.html';
      else if($_GET['parameters'] == "training")
         include 'training.html';
      else if($_GET['parameters'] == "products")
         include 'products.html';
      else if($_GET['parameters'] == "about")
         include 'about.html';
      else if($_GET['parameters'] == "employees")
         include 'employees.html';
      else if($_GET['parameters'] == "training")
         include 'training.html';
      else if($_GET['parameters'] == "newaccount")
         include 'newaccount.html';
      else if($_GET['parameters'] == "contact")
         include 'contact.html';
      else if($_GET['parameters'] == "recommended")
         include 'recommended.html';
      else if($_GET['parameters'] == "careers")
         include 'careers.html';
      else
         include 'home.html';
   }
   else
      include 'home.html';
?>

Jusqu'à présent, j'ai essayé et échoué à utiliser: window.onbeforeunloadbody onunload=""

Il doit y avoir un moyen de onunload=location.reload() ou quelque chose! Il faut en quelque sorte connaître la syntaxe !!

22
CodeManiak

Essayez ceci ... non testé. J'espère que cela fonctionnera pour vous.

Créez un nouveau fichier php. Vous pouvez utiliser les boutons Précédent et Suivant et le numéro/horodatage de la page est toujours mis à jour.

<?php
header("Cache-Control: no-store, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
echo time();
?>
<a href="http://google.com">aaaaaaaaaaaaa</a>

O

trouvé une autre solution

L'événement onload doit être déclenché lorsque l'utilisateur appuie sur le bouton de retour. Les éléments non créés via JavaScript conserveront leurs valeurs. Je suggère de conserver une sauvegarde des données utilisées dans l'élément créé dynamiquement dans un INPUT TYPE = "caché" défini pour afficher: aucun, puis onload en utilisant la valeur de l'entrée pour reconstruire les éléments dynamiques comme ils étaient.

<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();}
}
41
Gopal

Une solution plus récente utilise L'interface PerformanceNavigation :

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

Où la valeur 2 signifie "La page a été accessible en naviguant dans l'historique".

Voir le support du navigateur ici: http://caniuse.com/#search=Navigation%20Timing%20API

Recharger le site lorsque vous êtes atteint via le bouton de retour des navigateurs

32
sfscs

La solution d'entrée cachée ne fonctionnait pas pour moi dans Safari. La solution ci-dessous fonctionne et provient de ici .

window.onpageshow = function(event) {
if (event.persisted) {
    window.location.reload() 
}
};
13
t0vana

J'ai trouvé deux façons de gérer cela. Choisissez le meilleur pour votre cas. Solutions testées sur Firefox 53 et Safari 10.1

1. Détectez si l'utilisateur utilise le bouton arrière/avant, puis rechargez la page entière

if (!!window.performance && window.performance.navigation.type === 2) {
            // value 2 means "The page was accessed by navigating into the history"
            console.log('Reloading');
            window.location.reload(); // reload whole page

        }

2. recharger la page entière si la page est mise en cache

window.onpageshow = function (event) {
        if (event.persisted) {
            window.location.reload();
        }
    };
9
Javan R.

Cette solution simple publiée ici Forcer l'actualisation de la page sur le bouton de retour a fonctionné ...

J'ai essayé de forcer le téléchargement d'une page à nouveau par le navigateur lorsque l'utilisateur clique sur le bouton Retour, mais rien n'a fonctionné. Il semble que les navigateurs modernes disposent d'un cache séparé pour les pages, qui stocke l'état complet d'une page (y compris les éléments DOM générés par JavaScript), donc lorsque les utilisateurs appuient sur le bouton de retour, la page précédente s'affiche instantanément dans l'état où l'utilisateur l'a quittée. Si vous souhaitez forcer le navigateur à recharger la page sur le bouton de retour, ajoutez onunload = "" à votre élément de corps (X) HTML:

<body onunload="">

Cela désactive le cache spécial et force le rechargement de la page lorsque l'utilisateur appuie sur le bouton de retour. Réfléchissez bien avant de l'utiliser. Le fait d'avoir besoin d'une telle solution est un indice que votre concept de navigation sur le site est défectueux.

8
jahackbeth

avez-vous essayé quelque chose comme ça? pas testé...

$(document).ready(function(){
    $('.ajaxAnchor').on('click', function (event){ 
        event.preventDefault(); 
        var url = $(this).attr('href');
        $.get(url, function(data) {
            $('section.center').html(data);
            var shortened = url.substring(0,url.length - 5);
            window.location.hash = shortened;
        });
    });
});
2
reyaner

Vous pouvez utiliser ce qui suit pour actualiser la page en cliquant sur le bouton de retour:

window.addEventListener('popstate', () => {
  location.reload();
}, false);
1
Rohan Venapusala

Tout d'abord, insérez un champ dans votre code:

<input id="reloadValue" type="hidden" name="reloadValue" value="" />

puis exécutez jQuery:

<script type="text/javascript">
   jQuery(document).ready(function()
    {
            var d = new Date();
            d = d.getTime();
            if (jQuery('#reloadValue').val().length === 0)
            {
                    jQuery('#reloadValue').val(d);
                    jQuery('body').show();
            }
            else
            {
                    jQuery('#reloadValue').val('');
                    location.reload();
            }
    });
0
Agustin Gandara