Maison  >  Questions et réponses  >  le corps du texte

Empêcher Safari de mettre la page en cache lorsque vous cliquez sur le bouton Précédent

Safari a des problèmes pour charger les anciennes vidéos You Tube lorsque vous cliquez sur le bouton Précédent. J'ai essayé d'ajouter onunload="" (mentionné ici Empêcher le cache sur le bouton retour dans Safari 5) à la balise body mais cela ne fonctionne pas dans ce cas.

Existe-t-il un moyen d'empêcher Safari de se charger à partir du cache sur une page ?

P粉295728625P粉295728625271 Il y a quelques jours380

répondre à tous(2)je répondrai

  • P粉514001887

    P粉5140018872024-01-22 13:43:52

    Toutes ces réponses sont un peu bidouillées. Dans les navigateurs modernes (Safari), ne fonctionne que sur la solution onpageshow,

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

    Mais sur les appareils lents, vous verrez parfois la vue mise en cache une fraction de seconde avant le rechargement. La bonne façon de gérer cela est de définir correctement le Cache-Control sur la réponse du serveur, comme indiqué ci-dessous

    '缓存控制','无缓存,max-age=0,必须重新验证,无存储'

    répondre
    0
  • P粉495955986

    P粉4959559862024-01-22 09:58:12

    Votre problème est causé par le back cache. Il doit enregistrer l'état complet de la page lorsque l'utilisateur s'éloigne. Lorsque l'utilisateur revient en arrière à l'aide du bouton Précédent, la page peut être chargée très rapidement à partir du cache. Ceci est différent de la mise en cache normale qui met uniquement en cache le code HTML.

    Lorsque bfcache charge la page, onload事件不会被触发。相反,您可以检查 onpageshow 事件的 persisted attribut. Il est défini sur false lors du chargement initial de la page. Il est défini sur true lorsque la page est chargée depuis bfcache.

    La solution de Kludgish est de forcer un rechargement lorsque la page est chargée depuis bfcache.

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

    Si vous utilisez jQuery, procédez comme suit :

    $(window).bind("pageshow", function(event) {
        if (event.originalEvent.persisted) {
            window.location.reload() 
        }
    });

    répondre
    0
  • Annulerrépondre