Javascript: onrefresh sau onreload? (Programare, Javascript)

Sam Lee a intrebat.

Vreau un gestionar de evenimente care să pornească atunci când utilizatorul apasă reload. Este onrefresh sau onreload handlerul corect de adăugat la ? De asemenea, acest lucru se va declanșa chiar înainte sau după onunload? Există o inconsecvență a browserului? Mulțumesc.

7 răspunsuri
Rex M

Nu cred că există evenimente numite onrefresh sau onreload. Poți ști când se descarcă pagina, dar să știi de ce (adică unde se duce utilizatorul în continuare) este în afara sandbox-ului de securitate al JavaScript. Singura modalitate de a ști dacă pagina a fost reîncărcată este să știi unde a fost utilizatorul la ultima solicitare a paginii, ceea ce este, de asemenea, în afara domeniului de aplicare a JavaScript. Uneori, puteți obține acest lucru prin document.referrer, , dar se bazează pe setările de securitate ale browserului pentru a permite accesul la aceste informații.

Comentarii

  • din câte îmi dau seama: funcționează IE 8 Safari 4 nu funcționează FF 3 Chrome 2 toate testate pe win7 –  > Por Thomaschaaf.
tyler_mitchell

Proprietatea gestionarului de evenimente WindowEventHandlers.onbeforeunload conține codul executat atunci când este trimis beforeunload. Acest eveniment se declanșează atunci când o fereastră este pe cale să își descarce resursele.

window.onbeforeunload = function () {
   return 'Are you sure you want to leave?';
}

Acesta va afișa utilizatorului un dialog de confirmare cu mesajul pe care l-ați returnat în funcție. Acesta va oferi utilizatorului opțiunea de a părăsi această pagină sau de a anula.

Nu există nicio modalitate de a evita confirmarea, deoarece aceasta ar putea fi utilizată din motive rău intenționate.

https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload

Comentarii

  • O mică explicație cu privire la cod ar îmbunătăți drastic răspunsul dumneavoastră. –  > Por Thomas Bormans.
artlung

Dacă combinați setarea unui cookie cu un pentru pagina respectivă, cu o verificare a evenimentului onload, puteți simula evenimentul inexistent pe care îl căutați. Ați putea ajusta expirarea cookie-ului astfel încât o reîncărcare să fie luată în calcul doar dacă onload-ul inițial a avut loc cu un anumit interval de timp în urmă.

AnthonyWJones

Din câte știu eu, nu există evenimente onreload sau onrefresh. Cu siguranță, din javascript care rulează într-un browser, acest lucru nu prea are sens. Fereastra existentă și tot conținutul ei sunt efectiv eliminate. Prin urmare, trebuie să folosiți fie onunload al contextului existent, fie evenimentul load al noului context creat ca rezultat al reîncărcării.

Comentarii

  • Știu că a trecut un deceniu, dar un scenariu potrivit este să opriți reîmprospătarea pentru a face în schimb clic pe un buton de reîmprospătare pe un formular care transmite în siguranță (= fără interogări) informațiile de configurare către pagină pentru când aceasta se repornește. –  > Por Patanjali.
Teoria hexagonului

Cred că artlung ar putea într-adevăr să fi găsit o cale, de fapt… versiunea sa, totuși, se bazează pe cookie-uri, iar acestea pot fi oprite de la utilizare în numeroase moduri; soluția, atunci, este să folosiți un limbaj la alegere pe server pentru a salva data și ora la care pagina este unloaded prin JavaScript (tot o vulnerabilitate, da, dar de ce să nu mai arunci încă o idee, nu?) și apoi să o testezi din nou la fiecare încărcare a paginii; dacă detectezi o diferență mai mică de câteva secunde, probabil că utilizatorul tocmai a reîncărcat pagina ta. : )

squerg

ar putea folosi o sesiune. mai ușor decât un cookie și nu trebuie să-ți faci griji cu privire la expirare sau baza de date. Asta te-ar acoperi pentru orice pagină, cu excepția primei. Nu cred că superglobalul sesiunii este disponibil până la a doua pagină. Dacă aceasta este o problemă, ați putea să începeți o sesiune și să reîncărcați pagina imediat dacă nu există o sesiune activă.

Omer Hijazi

este onunload pentru că atunci când apăsați refresh browserul se „descarcă” și apoi se încarcă din nou.