Javascript ziņojums pirms loga aizvēršanas. JavaScript — loga objekts: logu atvēršana un aizvēršana. Ko mēs izmantojām, lai to pārbaudītu?

Man jau vairākas reizes ir jautāts, kā rīkoties, aizverot cilni. Pieņemsim, ka lietotājs vēlas aizvērt jūsu vietni, un jūs izveidojat kaut kādu uznirstošo logu un jautājat: Vai tu esi pārliecināts?", vai novirzīt uz citu vietni. Protams, šīs metodes lietotājiem ir ļoti kaitinošas, tāpēc iesaku tās neizmantot. Par laimi, arī pārlūkprogrammas ar to tiek galā ļoti slikti, tomēr joprojām ir dažas iespējas, kā rīkoties ar cilnes aizvēršanu.

Lietotājam var jautāt: " Vai viņš ir pārliecināts, ka vēlas aizvērt lapu?". Lūk, kā jūs varat ieviest šo cilnes aizvēršanas apstrādi:


window.onbeforeunload = function() (
atgriezt "Kaut ko pastāstīt lietotājam";
}

Šis kods darbosies pārlūkprogrammās Firefox, IE, Chrome, bet nedarbosies operētājsistēmā Opera (šī pārlūkprogramma pirms izkraušanas vispār neapstrādā). Šajā gadījumā pati apstrādes funkcija var atgriezt tikai virkni, tas ir, nekādas novirzīšanas tur nedarbosies.

Atgrieztā virkne tiks parādīta apstiprinājuma logā pārlūkprogrammā Chrome un IE. Šī rinda netiek rādīta pārlūkprogrammā Firefox.

“Onbeforeunload notikums neparāda vietnes piegādātu tekstu, tikai standarta ziņojumu”, spriežot pēc komentāriem, beidzot un neatsaucami. Šajā sakarā es gribēju nedaudz uzrakstīt par jautājuma vēsturi.

Daudzi cilvēki zina, ka, pateicoties onbeforeunload, jūs varat lūgt lietotājam neatstāt tīmekļa lapu, ja viņam ir nesaglabāti dati (piemēram, ierakstīti formā, bet nav nosūtīts ziņojums forumam). Lai to izdarītu, vienkārši pievienojiet kaut ko līdzīgu šim JavaScript:
window.onbeforeunload = funkcija (evt) ( var message = "Dokuments "foo" nav saglabāts. Ja pametīsit lapu, izmaiņas tiks zaudētas."; if (typeof evt == "undefined") ( evt = window.event ; ) if (evt) ( evt.returnValue = ziņojums; ) atgriešanas ziņojums; )
Pēc tam ideālā gadījumā, ja lietotājs vēlas pamest lapu (jebkurā veidā - aizveriet cilni, aizveriet visu pārlūkprogrammu, atkārtoti ielādējiet lapu, ievadiet jaunu adresi adreses joslā, dodieties uz grāmatzīmi utt.), viņš redzēs apstiprinājuma pieprasījumu un lapas atstāšanu var atcelt . Iepriekš negodīgi vietņu autori mēģināja izmantot šo logu, lai pārspētu lietotāju un noturētu viņu lapā, piemēram, izmantojot tekstu “Noklikšķiniet uz Labi, lai turpinātu darbu ar vietni, un uz Atcelt, lai aizvērtu” (patiesībā pogas darbojās ar otru otrādi). Vai pat kaut kas biedējošāks, piemēram, “Noklikšķiniet uz Labi, lai apstiprinātu 1000 ASV dolāru maksājumu no jūsu kredītkartes”.

Tad pārlūkprogrammas kļuva gudrākas un sāka pievienot palīgtekstu, lai būtu grūtāk maldināt lietotāju. Piemēram, lūk, kā IE8 to dara:

Gandrīz līdzīgs teksts bija pārlūkprogrammā Firefox 3:


Izlasot visu, kļūst skaidrs, par ko ziņoja vietne un par ko ziņoja pārlūkprogramma. Tomēr jūs joprojām varat krāpties.


Šeit mēs redzam skaidru darbību aprakstu tieši uz pogām. Jau tagad ir diezgan grūti pārliecināt lietotāju noklikšķināt uz “Aizstāt”, lai paliktu, un uz “Palikt”, lai aizietu. Manuprāt risinājums ir ideāls un šo tēmu var slēgt. Parasti, kā jūs zināt, gandrīz jebkurā dialoglodziņā bez sejas OK ir jāaizstāj ar darbības nosaukumu (piemēram, “Dzēst failus”, “Meklēt”, “Pievienot rindu”, “Atvērt failu” utt.), tas samazina lietotāja kļūdu skaitu, pat ja jums ir pilnīga kontrole pār dialoga tekstu.

Kāda bija drāma ar kļūdu 641509? Fakts ir tāds, ka šis apstiprinājums pārlūkprogrammā Firefox 4 un jaunākās versijās izskatās šādi:


Kā redzat, pielāgotais teksts ir pazudis pavisam. Sākot ar 4. versiju, vietne nevar sniegt lietotājam nekādu papildu ziņojumu vai paskaidrot, kāpēc tā īpaši nevēlas, lai lietotājs aiziet. Teiksim, ja jūs ieviešat saskarni darbam ar daudziem dokumentiem vienā logā, un viens no tiem nav saglabāts, jūs varētu pateikt, kurš no tiem konkrēti, bet Firefox jūs to nesapratīsit. Varbūt jūs nevēlaties to saglabāt un, ja redzat ziņojumu, jūs mierīgi atstātu lapu, bet pretējā gadījumā jūs nezināt, kas notiek. Lapā

Šajā nodarbībā mēs uzzināsim par dažādām loga objekta metodēm, kas ļauj atvērt un aizvērt logus, noteikt, vai logs ir aizvērts, kā arī iegūt tā iekšējo nosaukumu utt.

Logu objekta metodes ir open() , close() , print() , focus() un blur() .

Šajā sadaļā mēs apskatīsim šādas loga objekta metodes:

  • open() - paredzēts logu (cilņu) atvēršanai;
  • close() - paredzēts logu aizvēršanai. Galvenokārt izmanto, lai aizvērtu logus, kas atvērti, izmantojot open() metodi;
  • print() - paredzēts loga satura drukāšanai;
  • fokuss() - paredzēts fokusa pārnešanai uz norādīto logu;
  • blur() - ir paredzēts, lai noņemtu fokusu no norādītā loga.
open() metode. Tas ir paredzēts jauna loga (cilnes) atvēršanai pārlūkprogrammā, un tam ir šāda sintakse:

Metodes parametri:

  • Pirmais parametrs norāda tās lapas URL, kas jāielādē šajā logā. Ja šī parametra vērtība nav norādīta, logā tiks parādīta tukša lapa (about:blank).
  • Otrais atvērtās metodes parametrs norāda mērķa atribūta vērtību vai loga nosaukumu. Tiek atbalstītas šādas vērtības:
    • _blank — URL tiek ielādēts jaunā logā (cilnē). Šī ir noklusējuma vērtība;
    • _parent — URL tiek ielādēts vecākrāmā. Ja tā nav, tad URL tiek ielādēts pašreizējā logā (cilnē);
    • _self — URL tiek ielādēts pašreizējā logā;
    • _top — atceļ visus kadrus un ielādē URL pašreizējā pārlūkprogrammas logā (cilnē). Ja tā nav, tad URL tiek ielādēts pašreizējā logā (cilnē);
    • Kā parametru varat norādīt arī atveramā loga nosaukumu. Šis nosaukums ir iekšējs, un tīmekļa izstrādātāji to var izmantot, lai izsauktu šī loga funkcijas un metodes.
  • Trešais parametrs ir paredzēts, lai norādītu loga rekvizītu kopu, kas tiek ievadīta atdalot ar komatiem. Tiek atbalstītas šādas pamata loga īpašības:
    • pa kreisi , augšējā - pārlūkprogrammas loga augšējā kreisā stūra koordinātas (pikseļos) attiecībā pret ekrāna augšējo kreiso stūri. Šo īpašību vērtībām jābūt pozitīvām vai vienādām ar 0;
    • augstums, platums - pārlūkprogrammas loga darba zonas augstums un platums. Norādot vērtības, jāņem vērā, ka pārlūkprogrammas loga platums un augstums nevar būt mazāks par 100 pikseļiem;
    • resizable ir Būla loga rekvizīts, kas paredzēts, lai iespējotu vai atspējotu iespēju mainīt pārlūkprogrammas loga izmērus. Šis rekvizīts pieņem šādas vērtības: jā vai 1 un nē vai 0;
    • ritjoslas ir Būla loga rekvizīts, ko izmanto, lai iespējotu vai atspējotu pārlūkprogrammas loga satura ritjoslu rādīšanu. Šis rekvizīts pieņem šādas vērtības: jā vai 1 un nē vai 0;
    • statuss ir loģisks loga rekvizīts, kas paredzēts, lai iespējotu vai atspējotu pārlūkprogrammas statusa joslas rādīšanu. Šis rekvizīts pieņem šādas vērtības: jā vai 1 un nē vai 0.

Apsveriet šādus piemērus:

1. Atveriet tukšu lapu about:tukša jaunā logā. Šī loga platumam un augstumam ir jābūt 250 pikseļi:

Window.open("","","platums=250,augstums=250");

2. Atveriet tīmekļa lapu "http://site/" pašreizējā logā:

Window.open("http://site/", "_self");

3. Atveriet jaunu logu ar noteiktiem rekvizītiem (augšējā = 100, pa kreisi = 100, platums = 400, augstums = 500, ritjoslas = jā, resizabie = jā):

Window.open ("http://vietne", "_tukšs", "augšējais=100, pa kreisi = 100, platums = 400, augstums = 500, ritjoslas = jā, maināmi izmēri = jā");

Kā mijiedarboties ar logu pēc tā atvēršanas?

Open() metode ļauj ne tikai atvērt logu, bet arī iegūt saiti uz šo logu. Šī saite ļauj mijiedarboties ar šo logu, izsaucot noteiktus rekvizītus un metodes. Tie. Mēs varam izmantot JavaScript kodu, kas atrodas vienā logā, lai kontrolētu citu logu.

Piemēram, lai piekļūtu atvērta loga dokumenta objektam:

Atveriet jaunu tukšu logu un parādiet tajā tekstu:

Var myWindow = window.open("", "", "width=250, height=250"); myWindow.document.write("

Kaut kāds teksts

");

Piezīme: Jūs varat mijiedarboties tikai ar atvērtajiem logiem; jūs nevarat strādāt ar citiem logiem.

close() metode

Tas ir paredzēts loga aizvēršanai. Šai metodei nav parametru. To parasti izmanto, lai aizvērtu logus, kas izveidoti ar open() metodi. Pretējā gadījumā, mēģinot aizvērt logu (cilni), ko atvēris pats lietotājs (nevis no JavaScript), pārlūkprogramma drošības apsvērumu dēļ lūgs lietotājam apstiprinājumu šīs darbības veikšanai.

Piemēram, izveidosim pogas loga ar nosaukumu myWindow atvēršanai un aizvēršanai:

//izveido mainīgo, kurā saglabāsim atsauci uz atvērtā loga loga objektu var myWindow; funkcija myWindowOpen ( myWindow = window.open("http://www.yandex.ru", "myWindow", "width=250, height=250"); ) funkcija myWindowClose ( if (myWindow) ( myWindow.close() ; myWindow = null; ) ) Atvērt logu Aizvērt logu

print() metode

Tas ir paredzēts loga satura drukāšanai. Šai metodei nav parametru.

funkcija myPrint() ( window.print(); ) Drukāt lapu

fokusa() metode

Tas ir paredzēts, lai fokusētu norādīto logu. Šai metodei nav parametru.

blur() metode

Tas ir paredzēts, lai noņemtu fokusu no norādītā loga, t.i. pārvieto to uz fonu. Šai metodei nav parametru.

funkcija myWindowOpen() ( var myWindow = window.open("", "", "width=200,height=100"); ) funkcija myWindowFocus() ( myWindow.focus(); ) funkcija myWindowBlur() ( myWindow.blur (; ) Atvērt logu Fokusēt logu Pārvietot logu uz fonu

Loga objekta īpašības: nosaukums, atvērējs, aizvērts.

Šajā sadaļā mēs apskatīsim šādus loga objekta rekvizītus:

  • nosaukums - paredzēts, lai iegūtu vai iestatītu loga iekšējo nosaukumu;
  • atvērējs - ļauj pašreizējā logā iegūt saiti uz logu (loga objektu), no kura šis logs tika atvērts;
  • slēgts ir Būla rekvizīts, kas atgriež: true, ja logs ir aizvērts, un false, ja logs ir atvērts.
nosaukums īpašums

Šo rekvizītu ļoti bieži izmanto, lai mainītu loga iekšējo nosaukumu pēc tam, kad tas jau ir atvērts. Turklāt rekvizīts name var atgriezt loga iekšējā nosaukuma pašreizējo vērtību.

Loga iekšējais nosaukums nav virkne, kas atrodas starp sākuma un beigu virsraksta tagiem - tas ir loga nosaukums, kas paredzēts izstrādātājam. Tie. šis vārds lietotājam ir neredzams.

Šo nosaukumu galvenokārt izmanto hipersaitēs un veidlapās, lai norādītu logu, kurā lapa jāatver. Piemēram, lai hipersaitē norādītu loga iekšējo nosaukumu, tiek izmantots mērķa atribūts Ja elementam a ir atribūts target="searchWindow", tad, noklikšķinot uz šīs saites, pārlūkprogramma vispirms mēģina atrast logu ar šāds iekšējais nosaukums (searchWindow), ja nav neviena loga ar šādu iekšējo nosaukumu, tas atver jaunu logu un nosauc to par searchWindow . Un, ja pastāv logs ar tādu pašu nosaukumu, tad jauns logs netiek atvērts, bet lapa tiek atkārtoti ielādēta, izmantojot šajā logā norādīto saiti. Pēc noklusējuma pārlūkprogrammas logiem nav iekšēja nosaukuma.

Piemēram, atveram lapu "http://www.google.com/" logā ar nosaukumu myWindow:

window.name = "myWindow";

Piemēram, atveram logu, izmantojot metodi open() un parādīsim tajā tā nosaukumu:

var wnd = window.open("","myTest","platums=200, augstums=300"); wnd.document.write("

Šim logam ir nosaukums: " + wnd.name + ".");

atvērēja īpašums

Šis īpašums ļauj logā iegūt saiti uz sākotnējo logu (loga objektu), t.i. uz logu, no kura tika atvērts logs.

Piemēram, jums ir oriģināls logs (1), kurā izmantojat open() metodi, lai atvērtu citu logu (2). Šajā logā (2) varat izmantot atvērēja rekvizītu, lai iegūtu logu (1).

funkcija openMyWindow() ( var myWindow=window.open("","","width=200,height=200"); myWindow.document.write("Atvērt logu (2)"); $(document).ready (function() ( updatefgallowPrompt(true); window.onbeforeunload = WarnUser; ) funkcija WarnUser() ( var allowPrompt = getfgallowPrompt(); if(allowPrompt) ( saveIndexedDataAlert(); return null; ) else ( updatefgallowPrompt(true); notikums .stopPropagation ) ) funkcija saveIndexedDataAlert() ( var allowPrompt = getfgallowPrompt(); var lenIndexedDocs = parseInt($("#sortable3 > li").size()) + parseInt($("#sortable3 > ul").size( )); if(allowPrompt && $.trim(lenIndexedDocs) > 0) ( event.returnValue = "Jūsu ziņojums"; } 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"); }!}

Pēc tam strādāja pie manis;

$(window).unload(function(event) ( if(event.clientY< 0) { //do whatever you want when closing the window.. } });

Window.onbeforeunload = function () ( return "Vai tiešām vēlaties aizvērt?"; );

Varbūt tikai pirmsizlādēšanas notikumu apdarinātājs veidlapas iesniegšanas notikumu apdarinātājā:

JQuery("forma").submit(function() ( jQuery(window).unbind("pirms izkraušanas"); ... ));

2

Man ir viena vecāklapa un pakārtota lapa. bērna lapa atvērta jaunā cilnē

Es vēlos parādīt vienu brīdinājuma ziņojumu (bērnlapa tiek aizvērta), kad aizveru bērnu cilni.
Kā, aizverot cilni, parādīt aizvērto ziņojumu? (Nav atsvaidzinošs laiks)

Es izmantoju OnUnload un onbeforeunload.
Abas metodes tiek izsauktas arī, atsvaidzinot lapu un aizverot cilnes.

Window.onunload = funkcija doUnload(e) ( alert("Bērna logs tiek aizvērts..."); )

Window.onbeforeunload = funkcija doUnload(e) ( alert("Bērna logs tiek aizvērts..."); )

Man ir jāparāda brīdinājuma ziņojums, vienkārši aizveriet cilni pārlūkprogrammā.

Palīdzi man. Paldies jau iepriekš.

Es izmantoju šādu skriptu. Tas darbojās IE. Bet nedarbojās FireFox

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

Kā to panākt FireFox un citās pārlūkprogrammās.

  • 4 atbildes
  • Šķirošana:

    Aktivitāte

1

Šim afaik nekad nav bijis vairāku pārlūkprogrammu scenārijs. Risinājums ir NEPAļauties uz nedokumentētām un mainīgām pārlūkprogrammai raksturīgām funkcijām, lai atklātu kaut ko svarīgu.

Tā kā jums ir lapa CHILD, varat iestatīt testu vecākam (atvērējam), kas ik pa laikam pārbauda rekvizītu childWindowHandle.closed un rīkojas atbilstoši tam.

1

Pieņemot, ka tas vienkārši mēģina aktivizēt notikumu pirms izlādes Crossbrowser, tas gandrīz izdodas (izņemot operētājsistēmu).

Try( // http://www.opera.com/support/kb/view/827/ opera.setOverrideHistoryNavigationMode("saderīgs"); history.navigationMode = "saderīgs"; )catch(e)() //Mūsu kur F" Are You Going Message funkcija ReturnMessage() (atgriež "WTF!!!"; ) //UnBind Function funkcija UnBindWindow() ( window.onbeforeunload = null; return true; ) //Bind saites, kuras mēs nevēlamies ietekmēt dokumentu .getElementById("homebtn").onclick = UnBindWindow; document.getElementById("googlebtn").onclick = UnBindWindow; //Saistīšanas izejas ziņojuma dialogs window.onbeforeunload = ReturnMessage;

0

Jūs, iespējams, nevarēsit to izdarīt, izņemot dažas uz sīkfailiem balstītas metodes, kas ir darbs, lai izstrādātu risinājumus kā nepastāvīgus sīkfailus. Lapas atsvaidzināšanas, uz veidlapu balstītas novirzīšanas vai apgrieztās novirzīšanas vai pārlūkprogrammas aizvēršanas otrā identifikācija ar notikumu dumpingu nav vienkārša un nogurdinoša. Iesakām no tā nepaļauties.

varat veikt dažas mazas darbības, pirms klients aizver cilni. javascript nosaka pārlūkprogrammas aizvēršanas cilni/aizvērt pārlūkprogrammu , taču, ja darbību saraksts ir liels un cilne tiek aizvērta, pirms tā ir pabeigta, jūs esat bezpalīdzīgs. Var mēģināt, bet pēc manas pieredzes tas no tā nav atkarīgs. Jā, pašlaik jūs nevarat atšķirt, atjaunināt un aizvērt. Tāpēc nav ticama veida, kā noteikt, vai bērns patiešām ir noslēgts.

Window.addEventListener("beforeunload", funkcija (e) ( var apstiprināšanas ziņojums = "\o/"; /* Vai šeit ir neliels darbības kods */ (e || window.event).returnValue = apstiprinājuma ziņojums; //Gecko + IE atgriešanas apstiprinājuma ziņojums; //Webkit, Safari, Chrome ));