Wymuś ponowne załadowanie strony w Chrome za pomocą Javascript [bez pamięci podręcznej]
Muszę przeładować stronę za pomocą JavaScript i upewnić się, że nie pobiera z pamięci podręcznej przeglądarki, ale zamiast tego ładuje stronę z serwera. [Ponieważ elementy strony zmieniły się w międzyczasie]
Na IE i FF odkryłem, że poniższy kod działa poprawnie;
window.location.reload(true);
Jednak nie działa w Chrome ani Safari.
Próbowałem następujących rzeczy, ale także bezskutecznie;
window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
Czy istnieje rozwiązanie tego problemu?
Wyniki
Po zapoznaniu się z tym stwierdziłem, że ten problem to obsługa protokołu HTTP;
Chrome wysyła żądanie za pomocąPragma: no-cache
Pole HTTPSerwer odpowiada za pomocąLast-Modified: DATE1
poleJS używalocation.reload(true)
wymusić przeładowanie z serwera, a nie z pamięci podręcznejChrome wysyła żądanie za pomocąIf-Modified-Since: DATE1
poleSerwer odpowiada za pomocąHTTP Status 304 Not Modified
Aplikacja serwera jest winna za to, że nie zauważa zmiany stanu w dynamicznej zawartości strony, a tym samym nie zwraca a200
. Jednak Chrome / WebKit to jedyna przeglądarka, która wysyła wiadomośćIf-Modified-Since
pole, gdy JSlocation.reload(true)
jest nazywany.
Pomyślałem, że przedstawię tutaj moje odkrycia, gdy ktoś inny natknie się na ten sam problem.