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