web-dev-qa-db-de.com

Erzwingen Sie das erneute Laden/Aktualisieren, wenn Sie die Zurück-Taste drücken

Ich werde mein Bestes geben, um das zu erklären. 

Ich habe eine Anwendung, die die 50+ Projekte auf meiner Seite view anzeigt. Der Benutzer kann auf das einzelne Projekt klicken und zur Seite update wechseln, um die Projektinformationen zu aktualisieren. Alles funktioniert gut, außer dass der Benutzer die einzelnen Projektinformationen aktualisiert hat und auf "Zurück" im Browser zum vorherigen view page klickt. Die alten Projektinformationen (vor dem Update) sind noch vorhanden. Der Benutzer muss auf Aktualisieren klicken, um die aktualisierten Informationen anzuzeigen. Es ist nicht so schlimm, aber ich möchte eine bessere Benutzererfahrung bieten. Irgendeine Idee, das zu beheben? Danke vielmals.

18
FlyingCat

Ich denke, Sie müssen mit JS zusammenarbeiten, damit dies funktioniert, da PHP keine Möglichkeit hat, zu wissen, auf welchen Browser der Benutzer Zugriff hat ...

Vielleicht hilft dies: http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript

7
Loupax

Der "fb-Cache" kann wirklich nervig sein. Hier ist ein einfacher Javascript-Weg:

window.onpageshow = function(evt) {
    // If persisted then it is in the page cache, force a reload of the page.
    if (evt.persisted) {
        document.body.style.display = "none";
        location.reload();
    }
};

Getestet in Safari 6 und IE10.

17
abriggs

Ich verwende diese vier Zeilen des PHP -Codes:

// any valid date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// always modified right now
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: private, no-store, max-age=0, no-cache, must-revalidate, post-check=0, pre-check=0");
// HTTP/1.0
header("Pragma: no-cache");

Der Schlüssel verwendet die Klausel "no-store" des Cache-Control-Headers.

17
phper

Glücklicherweise müssen wir keine Browser unter IE10 unterstützen. Wenn Sie also nur HTML5-fähige Browser unterstützen oder privilegieren möchten, sollte Folgendes funktionieren:

/*
 * The following is intentional, to force Firefox to run 
 * this JS snippet after a history invoked back/forward navigation.
 */
window.onunload = function(){};    

function formatTime(t) {
    return t.getHours() + ':' + t.getMinutes() + ':' + t.getSeconds();
}

if (window.history.state != null && window.history.state.hasOwnProperty('historic')) {
    if (window.history.state.historic == true) {
        document.body.style.display = 'none';
        console.log('I was here before at ' + formatTime(window.history.state.last_visit));
        window.history.replaceState({historic: false}, '');
        window.location.reload();
    } else {
        console.log('I was forced to reload, but WELCOME BACK!');
        window.history.replaceState({
            historic  : true,
            last_visit: new Date()
        }, '');
    }
} else {
    console.log('This is my first visit to ' + window.location.pathname);
    window.history.replaceState({
        historic  : true,
        last_visit: new Date()
    }, '');
}

Nun, hier ist der Code ohne Kommentare und Flab:

window.onunload = function(){};

if (window.history.state != null && window.history.state.hasOwnProperty('historic')) {
    if (window.history.state.historic == true) {
        document.body.style.display = 'none';
        window.history.replaceState({historic: false}, '');
        window.location.reload();
    } else {
        window.history.replaceState({historic  : true}, '');
    }
} else {
    window.history.replaceState({historic  : true}, '');
}

Halten Sie das kurz vor Ihrem schließenden Tag fest, und Sie haben eine ziemlich saubere Lösung.

Dies funktioniert mit jeder Kombination von vorwärts/rückwärts, die angeklickt werden. Sobald der Benutzer auf einer neuen Seite landet, wird kein erzwungenes Neuladen durchgeführt.

Lesen Sie mehr über das History-Objekt in MDN:

MDN - Das History-Objekt

MDN - Browserverlauf verwalten

2

Nun, Sie könnten entweder eine integrierte Zurück-Schaltfläche auf der Aktualisierungsseite bereitstellen, um sie neu zu senden (z. B. einen Link <a href="<?= $_SERVER['HTTP_REFERRER']; ?>">BACK</a>), oder ein Skript auf die Seite setzen, durch das die Daten bei jedem Seitenaufruf gezwungen werden, ob Es ist ein neuer Eindruck, oder wenn die Zurück-Taste verwendet wurde.

1
James

Keine der oben genannten Lösungen funktionierte für mich ... Diese einfache Lösung mit here hat funktioniert ...

Ich habe versucht, das Herunterladen einer Seite durch den Browser zu erzwingen, wenn der Benutzer auf die Schaltfläche "Zurück" klickt, aber es hat nichts funktioniert. Moderne Browser verfügen offenbar über einen separaten Cache für Seiten, in dem der vollständige Status einer Seite gespeichert wird (einschließlich der von JavaScript generierten DOM-Elemente). Wenn Benutzer die Zurück-Schaltfläche drücken, wird die vorherige Seite sofort in dem Zustand angezeigt, in dem der Benutzer sie verlassen hat. Wenn Sie den Browser dazu zwingen möchten, die Seite auf die Schaltfläche "Zurück" erneut zu laden, fügen Sie Ihrem (X) HTML-Body-Element "onunload =" "hinzu:

<body onunload="">

Dies deaktiviert den speziellen Cache und erzwingt das Neuladen der Seite, wenn der Benutzer auf .__ drückt. Zurück-Button. Überlegen Sie zweimal, bevor Sie es verwenden. Tatsache, dass ein solcher Lösung ist ein Hinweis, dass das Navigationskonzept Ihrer Website fehlerhaft ist.

1
jahackbeth
 if (window.name == "reloader") {
            window.name = "";
            location.reload();
        }

window.onbeforeunload = function() {
                window.name = "reloader"; 
            }

Fügen Sie diese beiden Funktionen auf jeder Seite hinzu

1
Rohit

hier ist eine Lösung, die auf einigen meiner Seiten verwendet wurde. Fügen Sie dies den Seiten hinzu, an denen Änderungen vorgenommen werden.

window.onbeforeunload = function() {
     window.name = "reloader"; 
        }

dies wird ausgelöst, wenn Sie diese Seiten verlassen. Sie können es auch auslösen, wenn Änderungen vorgenommen wurden. damit es nicht unnötigerweise die Seite neu lädt, die neu geladen werden muss . dann auf Seiten, auf denen Sie nach einem "Zurücksetzen" des Browsers neu geladen werden möchten.

if (window.name == "reloader")
      {
        window.name = "no";
        reloadPage(); 
      }

dies löst ein Neuladen auf der Seite aus, auf die Sie neu laden müssen, und zwar auf ... Ich hoffe, das hilft.)

1
gekong

Dies ist die Lösung, die ich verwendet habe:

<?php
session_start();
if (!$_SESSION['reloaded']) {$_SESSION['reloaded'] = time();}
else if ($_SESSION['reloaded'] && $_SESSION['reloaded'] == time()) { ?> 
<script> 
location.reload(); 
</script> 
<?php } ?>
1
Paul Appleby

machen Sie ein verstecktes Kontrollkästchen und verwenden Sie den folgenden Code (Kaffeescript). 

window.location.reload()  if $("#refreshCheck")[0].checked
  $("#refreshCheck")[0].checked = true
0
Caner Çakmak

nach Tagen der Suche im Internet, um eine Lösung zu finden, finde ich es schließlich heraus und füge hinzu:

<script>
 window.onbeforeunload = function(){window.location.reload();}
</script>

das wird wie ein Zauber funktionieren. Sie werden mir danken

dieser Code lädt die Seite bei jedem Besuch neu.

0
mhd