Događa se Javascript napuštanje stranice. JavaScript - Objekat prozora: Otvaranje i zatvaranje prozora. Metode objekata prozora: open(), close(), print(), focus() i blur()



window js događaji (14)

Želim snimiti događaj zatvaranja prozora/kartice pretraživača. Probao sam sljedeće sa jQueryjem:

JQuery(window).bind("beforeunload", function() ( return confirm("Da li stvarno želite da zatvorite?")))

Ali radi i sa podnošenjem obrasca, što nije ono što želim. Želim događaj koji se pokreće samo kada korisnik zatvori prozor.

Od jQuery 1.7, metoda .live() je zastarjela. Koristite .on() da priložite rukovaoce događajima. Stariji korisnici jQuery verzije treba koristiti .delegate() umjesto .live()

$(window).bind("beforeunload", function() ( return true || confirm("Da li stvarno želite da zatvorite?"); ));

$(window).unbind();

JQuery(window).bind("beforeunload", function (e) ( var activeElementTagName = e.target.activeElement.tagName; if (activeElementTagName != "A" && activeElementTagName != "INPUT") ( vrati "Da li stvarno želite zatvoriti?"; ) ))

Moj odgovor je usmjeren na pružanje jednostavnih testova.

KAKO

Pogledajte odgovor @SLaks.

$(window).on("beforeunload", function() (vrati inFormOrLink ? "Da li stvarno želite da zatvorite?" : null; ))

Koliko će vremena trebati pretraživaču da konačno zatvori stranicu?

Kad god korisnik zatvori stranicu (dugme x ili CTRL+W), pretraživač se izvršava ovaj kod prije preunloada, ali ne na neodređeno vrijeme. Jedini izuzetak je prozor za potvrdu (povratak "Da li zaista želite da zatvorite?"), koji će čekati odgovor korisnika.

Chrome: 2 sekunde.
Firefox: ∞ (ili dvaput kliknite ili prisilno zatvorite)
Rub: ∞ (ili dvostruki klik)
Explorer 11: 0 sekundi.
safari: URADITI

Šta smo koristili da ovo testiramo:

  • Node.js Express server sa dnevnikom zahtjeva
  • Sljedeći kratki HTML fajl

Ono što radi je slanje što više zahtjeva prije nego što pretraživač dovrši svoju stranicu (sinhrono).

function request() ( vrati $.ajax(( tip: "GET", url: "http://localhost:3030/" + Date.now(), async: true )).responseText; ) window.onbeforeunload = ( ) => ( while (true) (request(); ) vrati null; )

Chrome izlaz:

GET /1480451321041 404 0,389 ms - 32 GET /1480451321052 404 0,219 ms - 32 ... GET /hello/1480451322998 404 0,328 ms - 32 GET /1480451321052 404 0,219 ms - 32 ... GET /hello/1480451322998 404 0,328 ms 2 - 5 sekundi budući da zahtjevi mogu potrajati nekoliko milisekundi biti poslat.

Probajte i ovo

Window.onbeforeunload = funkcija () ( if (pasteEditorChange) ( var btn = potvrdi ("Da li želite da sačuvate promene?"); if(btn === true)( SavetoEdit();//vaš poziv funkcije) ostalo ( windowClose();//vaš poziv funkcije ) ) else ( windowClose();//poziv funkcije ) );

Samo provjeri...

Funkcija wopen_close())( var w = window.open($url, "_blank", "width=600, visina=400, trake za pomicanje=ne, status=ne, promjenjive veličine=ne, screenx=0, screeny=0") ; w.onunload = function() ( if (window.closed) ( alert("prozor zatvoren"); )else( alert("upravo osvježen"); ) ) )

Nažalost, bez obzira da li će se pokrenuti ponovno učitavanje, preusmjeravanje nove stranice ili događaj zatvaranja pretraživača. Alternativa je uhvatiti id koji pokreće događaj, i ako je obrazac, ne pozivajte nijednu funkciju, a ako nije id obrasca, onda uradite ono što želite kada se stranica zatvori. Nisam siguran da li je i ovo moguće direktno i zamorno.

Postoje neke male stvari koje možete učiniti prije nego što klijent zatvori karticu. javascript detektuje zatvaranje kartice/zatvaranje pretraživača, ali ako je vaša lista radnji velika i kartica se zatvori pre nego što se završi, vi ste bespomoćni. Možete probati, ali po mom iskustvu to ne zavisi od toga.

Window.addEventListener("beforeunload", funkcija (e) ( var confirmationMessage = "\o/"; /* Da li ovdje koristite mali kod akcije */ (e || window.event).returnValue = confirmationMessage; //Gecko + IE return confirmationMessage; //Webkit, Safari, Chrome ));

Ako ih vaš prikaz obrasca šalje na drugu stranicu (što vjerujem da jeste, tj. pokreće se prije uklanjanja), možete pokušati promijeniti formu beforeunload u ajax poziv. Na ovaj način neće napustiti vašu stranicu kada se obrazac prije učitavanja, a vi možete koristiti svoje veze prije uklanjanja kako želite.

Za rješenje koje je dobro radilo s kontrolama treće strane kao što su Telerik (poput RadComboBox) i DevExpress, koje koriste oznake sidra iz različitih razloga, razmotrite sljedeći kod, koji je malo poboljšana verzija desm koda s boljim selektorom za samu sidrenu oznaku uvezivanje:

Var inFormOrLink; $("a:not(), a").live("klik", function() ( inFormOrLink = true; )); $("form").bind("submit", function() ( inFormOrLink = true; )); $(window).bind("beforeunload", function(eventObject) ( var returnValue = undefined; if (! inFormOrLink) ( returnValue = " Da li stvarno želite da zatvorite?)"; } eventObject.returnValue = returnValue; return returnValue; });!}

Koristio sam Slaks, ali ne radi kao što jeste jer se onbeforeunload returnValue analizira kao string i zatim prikazuje u prozoru za potvrdu pretraživača. Ovako se to prikazuje istinito, na primjer "tačno".

Samo koristim povratne informacije. Evo mog koda

Var preventUnloadPrompt; var messageBeforeUnload = "moja poruka ovdje - Jeste li sigurni da želite napustiti ovu stranicu?"; //var redirectAfterPrompt = "http://www.google.co.in"; $("a").live("click", function() ( preventUnloadPrompt = true; )); $("form").live("submit", function() ( preventUnloadPrompt = true; )); $(window).bind("beforeunload", function(e) ( var rval; if(preventUnloadPrompt) ( return; ) else ( //location.replace(redirectAfterPrompt); return messageBeforeUnload; ) return rval; ))

Var validNavigation = false; jQuery(document).ready(function () (wireUpEvents(); )); function endSession() ( // Preglednik ili kartica preglednika je zatvorena // Uradi sth ovdje ... alert("bye"); ) function wireUpEvents() ( /* * Za listu događaja koji se aktiviraju prije deunloada u IE * provjerite http ://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx */ window.onbeforeunload = function () ( debugger if (!validNavigation) ( endSession(); ) ) // Priložite događaj pritiskom na tipku da se isključi F5 osvježavanje $(document).bind("keypress", funkcija (e) (debugger if (e.keyCode == 116) ( validNavigation = true; ) )); // Priloži klik na događaj za sve linkovi na stranici $("a").bind("click", function () (debugger validNavigation = true; )); // Priložite slanje događaja za sve obrasce na stranici $("form").bind( "submit", function () ( debugger validNavigation = true; )); // Priloži događaj klik za sve ulaze na stranici $("input").bind("click", function () (debugger validNavigation = true; )); )`ovdje unesite kod`

Moj problem: Događaj "onbeforeunload" će se pokrenuti samo ako je postojao neparan broj podnošenja (klikova). Imao sam kombinaciju rješenja iz sličnih tema na SO da bi moje rješenje funkcioniralo. ok, moj kod će govoriti.

$(document).ready(function() ( updatefgallowPrompt(true); window.onbeforeunload = WarnUser; ) funkcija WarnUser() ( var allowPrompt = getfgallowPrompt(); if(allowPrompt) ( saveIndexedDataAlert(); vrati null; ) else ( updatefgallowPrompt(true); event.stopPropagation ) ) funkcija saveIndexedDataAlert() ( var allowPrompt = getfgallowPrompt(); var lenIndexedDocs = parseInt($("#sortable3 > li").size()) + parseInt($("#sortable3 > ul").size()); if(allowPrompt && $.trim(lenIndexedDocs) > 0) ( event.returnValue = "Vaša poruka"; } else { event.returnValue = " "; updatefgallowPrompt(true); } } $(document).click(function(event) { $("a").live("click", function() { updatefgallowPrompt(false); }); }); function updatefgallowPrompt (allowPrompt){ //exit msg dfds $("body").data("allowPrompt", allowPrompt); } function getfgallowPrompt(){ return $("body").data("allowPrompt"); }!}

Poslije je radio za mene;

$(prozor).unload(funkcija(događaj) ( if(event.clientY< 0) { //do whatever you want when closing the window.. } });

Window.onbeforeunload = function () (vraćanje "Da li stvarno želite da zatvorite?"; );

Možda samo obrađivač događaja prije učitavanja u obrascu za obradu događaja za slanje:

JQuery("forma").submit(function() (jQuery(window).unbind("preunload"); ... ));

2

Imam jednu roditeljsku i podređenu stranicu. podređena stranica otvorena u novoj kartici

Želim prikazati jednu poruku upozorenja (podređena stranica se zatvara) kada zatvorim podređenu karticu.
Kako prikazati zatvorenu poruku prilikom zatvaranja kartice? (Nije vrijeme za osvježavanje)

Koristio sam OnUnload i onbeforeunload .
Ove dvije metode se također pozivaju prilikom osvježavanja stranice i zatvaranja kartica.

Window.onunload = funkcija doUnload(e) ( upozorenje("Prozor djeteta se zatvara..."); )

Window.onbeforeunload = funkcija doUnload(e) ( upozorenje("Prozor djeteta se zatvara..."); )

Moram da prikažem poruku upozorenja, samo zatvorite karticu u pretraživaču.

Pomozi mi. Hvala unaprijed.

Koristim sljedeću skriptu. Radilo je u IE. Ali nije radio u FireFoxu

window.onbeforeunload = function() ( if ((window.event.clientX< 0) || (window.event.clientY < 0) || (window.event.clientX < -80)) { alert("Child window is closing..."); } };

Kako to postići u FireFox-u i drugim pretraživačima.

  • 4 odgovora
  • sortiranje:

    Aktivnost

1

Jer ovaj afaik nikada nije bio scenario za više pretraživača. Rješenje je da se NE oslanjate na nedokumentirane i varijabilne karakteristike specifične za pretraživač da biste otkrili bilo šta važno.

Pošto imate CHILD stranicu, možete postaviti test na nadređenom (otvaraču) koji provjerava svojstvo childWindowHandle.closed u intervalima i djeluje na to.

1

Pod pretpostavkom da samo pokušava pokrenuti događaj Crossbrowser prije deunloada, ovo prilično radi (osim u Operi)

Try( // http://www.opera.com/support/kb/view/827/ opera.setOverrideHistoryNavigationMode("compatible"); history.navigationMode = "compatible"; )catch(e)() //Naše gdje Funkcija F" Idete li poruka ReturnMessage() (vratite "WTF!!!"; ) // Funkcija UnBind Funkcija UnBindWindow() ( window.onbeforeunload = null; vrati true; ) //Vezivanje veza na koje ne želimo utjecati na dokument .getElementById("homebtn").onclick = UnBindWindow; document.getElementById("googlebtn").onclick = UnBindWindow; //Vezivanje izlaznog dijaloga poruke window.onbeforeunload = ReturnMessage;

0

Možda nećete moći to učiniti osim za neke metode zasnovane na kolačićima, što je razvojno rješenje jer nije postojano kolačići. Druga identifikacija osvježavanja stranice, preusmjeravanja na osnovu obrasca ili obrnutog preusmjeravanja ili zatvaranja pretraživača sa izbacivanjem događaja nije jednostavna i zamorna. Preporučujemo da ne zavisite od ovoga.

možete učiniti neke male stvari prije nego što klijent zatvori karticu. javascript detektuje preglednik zatvaranje kartice/zatvaranje pretraživača, ali ako je vaša lista akcija velika i kartica se zatvori prije nego što se završi, vi ste bespomoćni. Možete probati, ali po mom iskustvu to ne zavisi od toga. Da, u ovom trenutku ne možete razlikovati natrag, ažurirati i zatvoriti. Stoga ne postoji pouzdan način da se utvrdi da li je dijete zaista zatvoreno.

Window.addEventListener("beforeunload", funkcija (e) ( var confirmationMessage = "\o/"; /* Da li ovdje koristite mali kod akcije */ (e || window.event).returnValue = confirmationMessage; //Gecko + IE return confirmationMessage; //Webkit, Safari, Chrome ));



js događaj ponovnog učitavanja stranice (14)

Želim snimiti događaj zatvaranja prozora/kartice pretraživača. Probao sam sljedeće sa jQueryjem:

JQuery(window).bind("beforeunload", function() ( return confirm("Da li stvarno želite da zatvorite?")))

Ali radi i sa podnošenjem obrasca, što nije ono što želim. Želim događaj koji se pokreće samo kada korisnik zatvori prozor.

Možda samo obrađivač događaja prije učitavanja u obrascu za obradu događaja za slanje:

JQuery("forma").submit(function() (jQuery(window).unbind("preunload"); ... ));

Ako ih vaš prikaz obrasca šalje na drugu stranicu (što vjerujem da jeste, tj. pokreće se prije uklanjanja), možete pokušati promijeniti formu beforeunload u ajax poziv. Na ovaj način neće napustiti vašu stranicu kada se obrazac prije učitavanja, a vi možete koristiti svoje veze prije uklanjanja kako želite.

Probajte i ovo

Window.onbeforeunload = funkcija () ( if (pasteEditorChange) ( var btn = potvrdi ("Da li želite da sačuvate promene?"); if(btn === true)( SavetoEdit();//vaš poziv funkcije) ostalo ( windowClose();//vaš poziv funkcije ) ) else ( windowClose();//poziv funkcije ) );

Poslije je radio za mene;

$(prozor).unload(funkcija(događaj) ( if(event.clientY< 0) { //do whatever you want when closing the window.. } });

Koristio sam Slaks, ali ne radi kao što jeste jer se onbeforeunload returnValue analizira kao string i zatim prikazuje u prozoru za potvrdu pretraživača. Ovako se prikazuje vrijednost true, na primjer "true".

Samo koristeći povratne informacije. Evo mog koda

Var preventUnloadPrompt; var messageBeforeUnload = "moja poruka ovdje - Jeste li sigurni da želite napustiti ovu stranicu?"; //var redirectAfterPrompt = "http://www.google.co.in"; $("a").live("click", function() ( preventUnloadPrompt = true; )); $("form").live("submit", function() ( preventUnloadPrompt = true; )); $(window).bind("beforeunload", function(e) ( var rval; if(preventUnloadPrompt) ( return; ) else ( //location.replace(redirectAfterPrompt); return messageBeforeUnload; ) return rval; ))

Var validNavigation = false; jQuery(document).ready(function () (wireUpEvents(); )); function endSession() ( // Preglednik ili kartica preglednika je zatvorena // Uradi sth ovdje ... alert("bye"); ) function wireUpEvents() ( /* * Za listu događaja koji se aktiviraju prije deunloada u IE * provjerite http ://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx */ window.onbeforeunload = function () ( debugger if (!validNavigation) ( endSession(); ) ) // Priložite događaj pritiskom na tipku da se isključi F5 osvježavanje $(document).bind("keypress", funkcija (e) (debugger if (e.keyCode == 116) ( validNavigation = true; ) )); // Priloži klik na događaj za sve linkovi na stranici $("a").bind("click", function () (debugger validNavigation = true; )); // Priložite slanje događaja za sve obrasce na stranici $("form").bind( "submit", function () ( debugger validNavigation = true; )); // Priloži događaj klik za sve ulaze na stranici $("input").bind("click", function () (debugger validNavigation = true; )); )`ovdje unesite kod`

Možda možete rukovati OnSubmit i postaviti oznaku koju kasnije provjerite u rukovaocu OnBeforeUnload.

JQuery(window).bind("beforeunload", function (e) ( var activeElementTagName = e.target.activeElement.tagName; if (activeElementTagName != "A" && activeElementTagName != "INPUT") ( vrati "Da li stvarno želite zatvoriti?"; ) ))

Za rješenje koje je dobro radilo s kontrolama treće strane kao što su Telerik (poput RadComboBox) i DevExpress, koje koriste oznake sidra iz različitih razloga, razmotrite sljedeći kod, koji je malo poboljšana verzija desm koda s boljim selektorom za samu sidrenu oznaku uvezivanje:

Var inFormOrLink; $("a:not(), a").live("klik", function() ( inFormOrLink = true; )); $("form").bind("submit", function() ( inFormOrLink = true; )); $(window).bind("beforeunload", function(eventObject) ( var returnValue = undefined; if (! inFormOrLink) ( returnValue = " Da li stvarno želite da zatvorite?)"; } eventObject.returnValue = returnValue; return returnValue; });!}

Moj odgovor je usmjeren na pružanje jednostavnih testova.

KAKO

Pogledajte odgovor @SLaks.

$(window).on("beforeunload", function() (vrati inFormOrLink ? "Da li stvarno želite da zatvorite?" : null; ))

Koliko će vremena trebati pretraživaču da konačno zatvori stranicu?

Kad god korisnik zatvori stranicu (dugme x ili CTRL + W), pretraživač izvršava ovaj kod prije preunloada, ali ne u nedogled. Jedini izuzetak je prozor za potvrdu (povratak "Da li zaista želite da zatvorite?"), koji će čekati odgovor korisnika.

Chrome: 2 sekunde.
Firefox: ∞ (ili dvaput kliknite ili prisilno zatvorite)
Rub: ∞ (ili dvostruki klik)
Explorer 11: 0 sekundi.
safari: URADITI

Šta smo koristili da ovo testiramo:

  • Node.js Express server sa dnevnikom zahtjeva
  • Sljedeći kratki HTML fajl

Ono što radi je slanje što više zahtjeva prije nego što pretraživač dovrši svoju stranicu (sinhrono).

function request() ( vrati $.ajax(( tip: "GET", url: "http://localhost:3030/" + Date.now(), async: true )).responseText; ) window.onbeforeunload = ( ) => ( while (true) (request(); ) vrati null; )

Chrome izlaz:

GET /1480451321041 404 0,389 ms - 32 GET /1480451321052 404 0,219 ms - 32 ... GET /hello/1480451322998 404 0,328 ms - 32 GET /1480451321052 404 0,219 ms - 32 ... GET /hello/1480451322998 404 0,328 ms 2 - 5 sekundi budući da zahtjevi mogu potrajati nekoliko milisekundi biti poslat.

Za rješenje za više pregledača (testirano u Chrome 21, IE9, FF15), razmotrite sljedeći kod, koji je malo izmijenjena verzija Slaks koda:

Var inFormOrLink; $("a").live("klik", function() ( inFormOrLink = true; )); $("form").bind("submit", function() ( inFormOrLink = true; )); $(window).bind("beforeunload", function(eventObject) ( var returnValue = undefined; if (! inFormOrLink) ( returnValue = " Da li stvarno želite da zatvorite?)"; } eventObject.returnValue = returnValue; return returnValue; }); !}

Imajte na umu da se sa Firefoxom 4 pojavljuje poruka "Jeste li sigurni da želite zatvoriti?". nije prikazano. FF jednostavno prikazuje opštu poruku. Pogledajte bilješku na https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload

Događaj beforeunload se pokreće svaki put kada korisnik napusti vašu stranicu iz bilo kojeg razloga.

Na primjer, aktivirat će se ako korisnik pošalje obrazac, klikne na vezu, zatvori prozor (ili karticu) ili prijeđe na nova stranica koristeći adresnu traku, polje za pretragu ili obeleživač.

Var inFormOrLink; $("a").on("klik", function() ( inFormOrLink = true; )); $("form").on("submit", function() (inFormOrLink = true; )); $(window).on("beforeunload", function() (vrati inFormOrLink ? "Da li stvarno želite da zatvorite?" : null; ))

Za jQuery verzije starije od 1.7, pokušajte ovo:

Var inFormOrLink; $("a").live("klik", function() ( inFormOrLink = true; )); $("form").bind("submit", function() ( inFormOrLink = true; )); $(window).bind("beforeunload", function() ( return inFormOrLink ? "Da li stvarno želite da zatvorite?" : null; ))

live metoda ne radi sa submit događajem, pa ako dodate nova uniforma, takođe ćete morati da povežete rukovaoca za njega.

Imajte na umu da ako drugi rukovalac događajem otkaže slanje ili navigaciju, izgubit ćete upit za potvrdu ako se prozor stvarno zatvori kasnije. Ovo možete popraviti tako što ćete snimiti vrijeme u događajima slanja i klika i provjeriti da li je do preuzimanja ostalo više od nekoliko sekundi.

Samo provjeri...

Funkcija wopen_close())( var w = window.open($url, "_blank", "width=600, visina=400, trake za pomicanje=ne, status=ne, promjenjive veličine=ne, screenx=0, screeny=0") ; w.onunload = function() ( if (window.closed) ( alert("prozor zatvoren"); )else( alert("upravo osvježen"); ) ) )

Od jQuery 1.7, metoda .live() je zastarjela. Koristite .on() da priložite rukovaoce događajima. Korisnici starijih verzija jQueryja trebali bi koristiti .delegate() umjesto .live()

$(window).bind("beforeunload", function() ( return true || confirm("Da li stvarno želite da zatvorite?"); ));

Dobar dan. Nedavno sam objavio članak kako se to radi, ali su mnogi tražili da dodaju članak sa efektom ogledala, kako bi se prozor pojavio kada posjetitelj napusti stranicu, odnosno kada pokuša zatvoriti stranicu.

Danas ćemo razgovarati o ovoj temi, a ja ću vam pokazati jednostavnu implementaciju.

Naravno, debata o tome da li biste trebali dodati skočni prozor na svoju stranicu nikada neće prestati. Neki kažu da postoji posebno mjesto u paklu rezervirano za one koji ga dodaju, da je to divlje bijes, da ako sam odlučio da odem, onda ću otići i nikakvi iskačući prozori me neće zaustaviti, već će me samo nervirati. Drugi kažu da ovi iskačući prozori povećavaju konverzije i rade odlično. Mislim da vrijedi pokušati, a zatim na osnovu statistike izvući konkretne zaključke u vezi sa svojom nišom i proizvodom.

Kako napraviti popup kada zatvorite stranicu

Zapravo, nisam više odugovlačio i samo sam malo promijenio prethodni članak i dodao nekoliko linija javascript koda. Ranije se modalni prozor pojavljivao kada ste prvi put posjetili stranicu. Sada će se prikazati samo pri prvoj posjeti web-mjestu (kada kursor napusti glavno područje web-mjesta i pomakne se na područje kartice). Ako korisnik ponovo posjeti stranicu, ovaj prozor se neće prikazati. Ovo se implementira na potpuno isti način kao u prethodnom članku, koristeći kolačiće. Kolačići se čuvaju 7 dana, možete odrediti bilo koju količinu po svom nahođenju.

Pa ipak, ne pridajemo događaj kliku na krstić na kartici, već jednostavno provjeravamo poziciju kursora. Ne blokiramo prozor, dugmad i sl., ne tražimo ništa, već jednostavno pokazujemo prozor.

Kao i prošli put, koristićemo jQuery dodatak arcticModal, što znači da ćemo povezati sam jQuery:

I povezujemo temu dodatka, ja koristim standardnu, ali možete napisati svoju:

Sada, da bi naši kolačići radili, dodaćemo dodatak za kolačiće iz Yandexa:

I povežite config.js skriptu sa sljedećim sadržajem:

$(document).ready(function () ( if (!$.cookie("smartCookies")) ( $(document).mouseleave(function (e) ( function getWindow() ( $(".offer").arcticmodal (( closeOnOverlayClick: true, closeOnEsc: true )); ); setTimeout(getWindow, 1); $.cookie("smartCookies", true, (ističe: 7, put: "/" )); )); )) );

Ako ste pročitali zadnji članak, primijetili ste da se ništa nije promijenilo, osim da se skripta u datoteci config.js malo promijenila. Odnosno, jednostavno se pojavio još jedan uslov koji se pokreće kada kursor napusti područje stranice, odnosno nalazi se u području kartica.

Inače, prošli put sam zaboravio da objasnim šta znače ovi parametri:

CloseOnOverlayClick: istina, closeOnEsc: istina

  • closeOnOverlayClick - omogućava vam da zatvorite prozor kada kliknete na bilo koje područje izvan prozora.
  • closeOnEsc - zatvara prozor kada pritisnete Escape

Sada o samom izgledu stranice. Apsolutno se ništa nije promijenilo.

Vaš prijedlog, obrazac, itd. će biti ovdje. Možete umetnuti obrazac ili ponuditi da vas pratimo na društvenim mrežama

Objasniću malo. modalInner — omotač modalni prozor, sa display:none u stilovima. ponuda je klasa samog modalnog prozora. Ako ga promijenite, ne zaboravite promijeniti klasu u skripti.

Evo jednostavne implementacije iskačućeg prozora prilikom zatvaranja stranice. Mislite li da se isplati koristiti sličan efekat na web stranici?

“onbeforeunload događaj ne prikazuje tekst dostavljen sa sajta, samo standardnu ​​poruku”, sudeći po komentarima, konačno i neopozivo. S tim u vezi, htio sam malo napisati o historiji problema.

Mnogi ljudi znaju da zahvaljujući onbeforeunloadu možete zamoliti korisnika da ne napušta web stranicu ako ima nesačuvane podatke (na primjer, napisane u obrascu, ali nije poslao poruku na forum). Da biste to učinili, samo dodajte nešto poput ovog JavaScripta:
window.onbeforeunload = funkcija (evt) ( var message = "Dokument "foo" nije sačuvan. Izgubit ćete promjene ako napustite stranicu."; if (typeof evt == "undefined") ( evt = window.event ; ) if (evt) ( evt.returnValue = poruka; ) povratna poruka; )
Nakon ovoga, idealno, ako korisnik želi napustiti stranicu (na bilo koji način - zatvorite karticu, zatvorite cijeli pretraživač, ponovo učitajte stranicu, unesite nova adresa V adresna traka, idite na bookmark, itd.), vidjet će zahtjev za potvrdu i napuštanje stranice može se otkazati. Ranije su beskrupulozni autori web stranica pokušavali koristiti ovaj prozor da nadmudre korisnika i zadrže ga na stranici, na primjer, koristeći tekst "Kliknite OK da nastavite raditi s web-mjestom i Otkaži da zatvorite" (u stvari, dugmad su radila na drugom naopako). Ili čak nešto strašnije poput "Kliknite OK da potvrdite naplatu od 1.000 USD na vašoj kreditnoj kartici."

Zatim su pretraživači postali mudriji i počeli da dodaju pomoćni tekst kako bi bilo teže prevariti korisnika. Na primjer, evo kako IE8 to radi:

Skoro sličan tekst je bio u Firefoxu 3:


Ako sve pročitate, postaje jasno šta je sajt prijavio, a šta pretraživač. Međutim, još uvijek možete varati.


Ovdje vidimo jasan opis radnji direktno na dugmadima. Već je prilično teško uvjeriti korisnika da klikne na “Napusti” da ostane i “Ostani” da ode. Po meni je rešenje idealno i ova tema se može zatvoriti. Općenito, kao što znate, bezličan OK u gotovo svakom dijalogu treba zamijeniti imenom radnje (na primjer, "Izbriši datoteke", "Pretraži", "Dodaj red", "Otvori datoteku" itd.), ovo smanjuje broj korisničkih grešaka, čak i ako imate potpunu kontrolu nad tekstom dijaloga.

Kakva je bila drama s bubom 641509? Činjenica je da ova potvrda u Firefoxu 4 i novijim izgleda ovako:


kao što se vidi, prilagođeni tekst potpuno nestao. Od verzije 4, web stranica ne može pružiti nikakvu dodatnu poruku korisniku niti objasniti zašto konkretno ne želi da korisnik napusti. Recimo, ako implementirate sučelje za rad sa više dokumenata u jednom prozoru, a jedan od njih nije sačuvan, mogli biste reći koji konkretno, ali u Firefoxu to nećete razumjeti. Možda ne želite da je sačuvate i da biste videli poruku, mirno biste napustili stranicu, ali inače ne znate šta se dešava. U listu