Odpowiedzi:
Jeśli dobrze pamiętam, ponownie window.location.reload()ładuję bieżącą stronę danymi POST, window.location.href=window.location.hrefale nie zawiera danych POST.
Jak zauważył @ W3Max w komentarzach poniżej, window.location.href=window.location.hrefnie przeładuje strony, jeśli w adresie URL jest kotwica (#) - Musisz użyćwindow.location.reload() takim przypadku .
Ponadto, jak zauważył @Mic poniżej, window.location.reload()bierze dodatkowy argument, skipCachedzięki czemu przy użyciu window.location.reload(true)przeglądarki pominie pamięć podręczną i ponownie załaduje stronę z serwera. window.location.reload(false)zrobi odwrotnie i załaduje stronę z pamięci podręcznej, jeśli to możliwe.
Jeśli mówisz, window.location.reload(true)że przeglądarka pominie pamięć podręczną i ponownie załaduje stronę z serwera. window.location.reload(false)zrobi odwrotnie.
Uwaga: defaultwartość dla window.location.reload()isfalse
window.location.href = window.location.hrefzrobiłem.
location.reload()lub location.reload(false). Aby wykonać pełne odświeżenie strony, użyj location.reload(true).
Różnica jest taka
window.location = document.URL;
nie przeładuje strony, jeśli w adresie URL znajduje się skrót (#) (z lub bez czegoś po nim), natomiast
window.location.reload();
przeładuje stronę.
location.href = location.hrefza coś oczywistego, ale właśnie zauważyłem to dokładne zachowanie i przyszedłem do SO, aby rozpowszechnić informacje. location.reload()Zamiast tego użyj .
window.location.replace(window.location.pathname);
Jeśli dodasz wartość logiczną true do przeładowania
window.location.reload(true), zostanie ona załadowana z serwera.
Nie jest jasne, w jaki obsługiwany jest to logiczna, W3Org wspomina, że NS wykorzystywane do wspierania go
Może istnieć różnica między zawartością window.location.href i document.URL - przynajmniej kiedyś istniała różnica między location.href a niestandardową i nieaktualną lokalizacją document.lore, która miała związek z przekierowaniem, ale to to naprawdę ostatnie tysiąclecie.
Do celów dokumentacji użyłbym funkcji window.location.reload (), ponieważ właśnie to chcesz zrobić.
Jak powiedziano, modyfikacja href, gdy w adresie URL znajduje się skrót (#), nie spowoduje ponownego załadowania strony. Dlatego używam tego do przeładowania zamiast wyrażeń regularnych:
if (!window.location.hash) {
window.location.href = window.location.href;
} else {
window.location.reload();
}
Spotykając się z tym pytaniem, badając niektóre nieprawidłowe zachowania w IE, szczególnie IE9, nie sprawdziłem starszych wersji. Wydaje się
window.location.reload();
powoduje odświeżenie, które na sekundę usuwa cały ekran, gdzie as
window.location = document.URL;
odświeża stronę znacznie szybciej, prawie niezauważalnie.
Przeprowadzając nieco więcej badań i eksperymentując ze skrzypkiem, wydaje się, że window.location.reload()obejdzie pamięć podręczną i przeładuje z serwera, niezależnie od tego, czy przekażesz z nią wartość logiczną, czy nie, obejmuje to uzyskanie wszystkich zasobów (obrazów, skryptów, arkuszy stylów, itp.) ponownie. Więc jeśli chcesz tylko, aby strona odświeżyła HTML,window.location = document.URL powróci ona znacznie szybciej i przy mniejszym ruchu.
Różnica w zachowaniu między przeglądarkami polega na tym, że gdy IE9 używa metody przeładowania, usuwa widoczną stronę i pozornie odbudowuje ją od zera, gdzie FF i chrome czekają, aż otrzymają nowe zasoby i odbudują je, jeśli są różne.
Różnica w Firefoksie (12.0) polega na tym, że na stronie renderowanej z POST reload () wyświetli ostrzeżenie i prześle ponownie, podczas gdy przypisanie adresu URL wykona GET.
Google Chrome robi GET dla obu.
Korzystając z JSF, mam teraz problem z odświeżaniem po zakończeniu sesji: PrimeFaces ViewExpiredException po przeładowaniu strony i po pewnym dochodzeniu znalazłem jedną różnicę w FireFox:
Wywołanie window.location.reload()działa jak kliknięcie ikony odświeżania na FF, dodaje linię
Cache-Control max-age=0
chociaż ustawienie window.location.hrefdziała jak naciśnięcie ENTER w wierszu adresu URL, nie wysyła tego wiersza.
Chociaż oba są wysyłane jako GET, pierwszy (przeładowanie) przywraca poprzednie dane, a aplikacja jest niespójna.
z mojego około 3-letniego doświadczenia nie mogłem znaleźć żadnej różnicy ...
edit: tak, jak powiedział jeden z nich, tylko przekazanie parametru boolean do window.location.reload () jest różnicą. jeśli przekażesz true , przeglądarka ładuje świeżą stronę, ale jeśli false , ładowana jest wersja pamięci podręcznej ...
W naszym przypadku chcemy po prostu ponownie załadować stronę w widoku internetowym iz kilku powodów nie mogliśmy dowiedzieć się, dlaczego! Wypróbowujemy prawie każde rozwiązanie, które było w sieci, ale utknęliśmy bez przeładowywania za pomocą location.reload () lub alternatywnych rozwiązań, takich jak window.location.reload (), location.reload (true), ...!
Oto nasze proste rozwiązanie:
Wystarczy użyć tagu <a> z pustą wartością atrybutu „href” w następujący sposób:
< a href="" ...>Click Me</a>
(w niektórych przypadkach musisz użyć „return true” po kliknięciu celu, aby uruchomić przeładowanie)
Aby uzyskać więcej informacji, sprawdź to pytanie: Czy pusty href jest prawidłowy?
window.location.href, to uratowało mi życie w widoku internetowym z Androida 5.1. Strona nie ładuje się ponownie z location.reload () w tej wersji z Androida.