Chcę sprawdzić, czy ktoś próbuje odświeżyć stronę.
Na przykład po otwarciu strony nic się nie dzieje, ale po odświeżeniu strony powinien zostać wyświetlony alert.
window.performance.navigation.typejest przestarzałe, proszę zobaczyć moją odpowiedź .
Chcę sprawdzić, czy ktoś próbuje odświeżyć stronę.
Na przykład po otwarciu strony nic się nie dzieje, ale po odświeżeniu strony powinien zostać wyświetlony alert.
window.performance.navigation.typejest przestarzałe, proszę zobaczyć moją odpowiedź .
Odpowiedzi:
⚠️⚠️⚠️ window.performance.navigation.typejest przestarzałe, proszę zobaczyć odpowiedź Илья Зеленько
Lepszym sposobem, aby wiedzieć, że strona została ponownie załadowana, jest użycie obiektu nawigatora obsługiwanego przez większość współczesnych przeglądarek.
Korzysta z interfejsu API synchronizacji nawigacji .
//check for Navigation Timing API support
if (window.performance) {
console.info("window.performance works fine on this browser");
}
if (performance.navigation.type == 1) {
console.info( "This page is reloaded" );
} else {
console.info( "This page is not reloaded");
}
źródło: https://developer.mozilla.org/en-US/docs/Web/API/Navigation_timing_API
performance.navigation.type == performance.navigation.TYPE_RELOADjest łatwiejszy do odczytania zamiast == 1. Ponadto, jeśli sprawdzisz performance.navigation, zauważysz, że istnieją 4 różne typy nawigacji, takie jak TYPE_BACK_FORWARD:TYPE_NAVIGATE
window.performance.navigation.typejest przestarzałe, proszę zobaczyć moją odpowiedź .
Pierwszym krokiem jest sprawdzenie, sessionStorageczy istnieje pewna wstępnie zdefiniowana wartość i czy istnieje alarm użytkownika:
if (sessionStorage.getItem("is_reloaded")) alert('Reloaded!');
Drugim krokiem jest ustawienie sessionStoragepewnej wartości (na przykład true):
sessionStorage.setItem("is_reloaded", true);
Wartości sesji są przechowywane do momentu zamknięcia strony, więc będzie działać tylko wtedy, gdy strona zostanie ponownie załadowana w nowej karcie z witryną. Możesz także zachować liczbę przeładowań w ten sam sposób.
truejest konwertowany na "true". 2). Pamięć sesji jest utrzymywana, dopóki użytkownik nie zamknie okna przeglądarki, więc nie można odróżnić przeładowywania strony od opuszczania witryny i powrotu do niej w tej samej sesji przeglądarki.
window.performance.navigationwłaściwość jest nieaktualna w specyfikacji poziomu synchronizacji poziomu 2 . PerformanceNavigationTimingZamiast tego użyj interfejsu.
To jest technologia eksperymentalna .
Sprawdź dokładnie tabelę zgodności przeglądarki przed użyciem jej w produkcji.

Właściwość typu tylko do odczytu zwraca ciąg znaków reprezentujący typ nawigacji. Wartość musi być jedną z następujących czynności:
nawiguj - nawigacja rozpoczęła się od kliknięcia linku, wpisania adresu URL w pasku adresu przeglądarki, przesłania formularza lub zainicjowania operacji skryptu innej niż przeładowanie i powrót do poprzedniej wersji, jak podano poniżej.
reload - Nawigacja odbywa się poprzez operację przeładowania przeglądarki lub location.reload().
back_forward - Nawigacja odbywa się poprzez przeglądanie historii przeglądarki.
prerender - Nawigacja jest inicjowana przez wskazówkę dotyczącą prerendera .
Ta właściwość jest tylko do odczytu.
function print_nav_timing_data() {
// Use getEntriesByType() to just get the "navigation" events
var perfEntries = performance.getEntriesByType("navigation");
for (var i=0; i < perfEntries.length; i++) {
console.log("= Navigation entry[" + i + "]");
var p = perfEntries[i];
// dom Properties
console.log("DOM content loaded = " + (p.domContentLoadedEventEnd - p.domContentLoadedEventStart));
console.log("DOM complete = " + p.domComplete);
console.log("DOM interactive = " + p.interactive);
// document load and unload time
console.log("document load = " + (p.loadEventEnd - p.loadEventStart));
console.log("document unload = " + (p.unloadEventEnd - p.unloadEventStart));
// other properties
console.log("type = " + p.type);
console.log("redirectCount = " + p.redirectCount);
}
}
Przechowuj plik cookie przy pierwszej wizycie na stronie. Po odświeżeniu sprawdź, czy plik cookie istnieje, a jeśli tak, powiadom alert.
function checkFirstVisit() {
if(document.cookie.indexOf('mycookie')==-1) {
// cookie doesn't exist, create it now
document.cookie = 'mycookie=1';
}
else {
// not first visit, so alert
alert('You refreshed!');
}
}
i na twoim ciele tag:
<body onload="checkFirstVisit()">
Jeśli
event.currentTarget.performance.navigation.type
zwroty
0 => użytkownik właśnie wpisał adres URL
1 => strona została ponownie załadowana
2 => kliknięty przycisk Wstecz.
performance.navigation.typejest przestarzałe, proszę zobaczyć moją odpowiedź .
Znalazłem tu trochę informacji Odśwież stronę z wykrywaniem Javascript . Jego pierwszą rekomendacją jest użycie ukrytych pól, które zwykle są przechowywane przez odświeżanie strony.
function checkRefresh() {
if (document.refreshForm.visited.value == "") {
// This is a fresh page load
document.refreshForm.visited.value = "1";
// You may want to add code here special for
// fresh page loads
} else {
// This is a page refresh
// Insert code here representing what to do on
// a refresh
}
}
<html>
<body onLoad="JavaScript:checkRefresh();">
<form name="refreshForm">
<input type="hidden" name="visited" value="" />
</form>
</body>
</html>
Refererwłaściwość i modyfikując odpowiedź serwera na podstawie tej właściwości
<script>elementu na dół działałoby - ale nadal nie jest to gwarantowane rozwiązanie (podobnie jak metoda cookie).
Referernie jest wiarygodne; wiele serwerów proxy i rozszerzeń przeglądarki usuwa je z żądań.
Napisałem tę funkcję, aby sprawdzić obie metody jednocześnie za pomocą starej window.performance.navigationi nowej performance.getEntriesByType("navigation"):
function navigationType(){
var result;
var p;
if (window.performance.navigation) {
result=window.performance.navigation;
if (result==255){result=4} // 4 is my invention!
}
if (window.performance.getEntriesByType("navigation")){
p=window.performance.getEntriesByType("navigation")[0].type;
if (p=='navigate'){result=0}
if (p=='reload'){result=1}
if (p=='back_forward'){result=2}
if (p=='prerender'){result=3} //3 is my invention!
}
return result;
}
Opis wyniku:
0: kliknięcie linku, wprowadzenie adresu URL w pasku adresu przeglądarki, przesłanie formularza, kliknięcie zakładki, zainicjowanie za pomocą operacji skryptu.
1: Kliknięcie przycisku Załaduj ponownie lub użycieLocation.reload()
2: Praca z historią przeglądania (Bakc i Forward).
3: działanie prerenderujące, takie jak<link rel="prerender" href="https://stackoverflow.com//example.com/next-page.html">
4: dowolna inna metoda.
if(sessionStorage.reload) {
sessionStorage.reload = true;
// optionnal
setTimeout( () => { sessionStorage.setItem('reload', false) }, 2000);
} else {
sessionStorage.setItem('reload', false);
}