2012-07-14 1 views
5

Wenn Sie einen besseren Titel für diese Frage haben, können Sie ihn bearbeiten.location.reload mit Cache

Für die längste Zeit habe ich immer location.reload() verwendet, um die Seite neu zu laden - es ist das logischste zu tun, richtig?

Aber ich habe kürzlich festgestellt, dass es nicht das Äquivalent zu F5 ist, wie ich anfangs gedacht hatte, sondern mehr von Strg + F5. Alle Bilder und andere verknüpfte Dateien wurden erneut vom Server angefordert, als ich die Seite nur neu laden wollte.

Ich entdeckte, dass ich location.replace(location.href) verwenden konnte, und dies scheint den gewünschten Effekt zu erzielen: Laden Sie die Seite neu, rufen Sie jedoch verknüpfte Dateien aus dem Cache ab.

Ist das ideal? Gibt es einen besseren Weg als das? Habe ich irgendwelche Fallstricke übersehen, die diese Methode haben könnte?

(Anmerkung: Ich habe bereits Cachebusting-Management auf verknüpfte Dateien wie Skripte, indem die filemtime als Query-String anhängt)

+0

window.location.reload (falsch); lädt aus dem Cache ... – Drewness

+0

@TGxANAHEiiMx ["Wenn es falsch oder nicht angegeben ist, lädt der Browser die Seite möglicherweise aus dem Cache."] (https://developer.mozilla.org/en/DOM/window. Standort) - Beachten Sie die Verwendung von "Mai" und "die Seite" - es sagt nichts über "wird" oder verknüpfte Dateien. –

+0

Ah, Punkt genommen. Nicht das Beste, da Sie es vom Standpunkt der "best practices" aus erreichen und nicht nur von einer "funktionalen" Situation ... – Drewness

Antwort

4

In der Antwort auf meine eigene Frage, gibt es eine massive Gefahr: Wenn die Lage Enthält einen Hash, springt der Browser zu diesem Hash, anstatt die Seite neu zu laden.

Die Lösung I ist wie folgt umgesetzt:

reload = (function() { 
    var m = location.search.match(/[?&]__hash=([^&]+)/); 
    if(m) location.hash = unescape(m[1]); 
    return function() { 
      var h = location.hash; 
      if(h == "") { 
        location.replace(location.href); 
      } 
      else { 
        var s = location.search; 
        s = s.replace(/[?&]__hash=[^&]+/,''); 
        s += (s == "" ? "?" : "&")+"__hash="+escape(h); 
        location.replace(location.pathname+s); 
      } 
    }; 
})(); 

nichts auf der Serverseite verwendet $_GET['__hash'] Angenommen, kann dies sicher verwendet werden.