Javascriptová zpráva před zavřením okna. JavaScript - Window Object: Otevírání a zavírání oken. Co jsme použili k testování?

Už jsem byl několikrát dotázán, jak zacházet s zavřením karty. Řekněme, že uživatel chce zavřít váš web a vy vytvoříte nějaké vyskakovací okno a zeptáte se: " Jsi si jistá?", nebo přesměrování na jiný web. Tyto způsoby jsou samozřejmě pro uživatele velmi otravné, proto je doporučuji nepoužívat. Prohlížeče to naštěstí také zvládají velmi špatně, nicméně stále existují nějaké možnosti, jak zavírání karet zvládnout.

Je možné se uživatele zeptat: " Je si jistý, že chce stránku zavřít?". Zde je návod, jak implementovat toto zpracování zavírání karty:


window.onbeforeunload = function() (
vrátit "Něco říct uživateli";
}

Tento kód bude fungovat ve Firefoxu, IE, Chrome, ale nebude fungovat v Opeře (tento prohlížeč vůbec nezpracovává onbeforeunload). V tomto případě může samotná funkce zpracování vrátit pouze řetězec, to znamená, že tam nebudou fungovat žádná přesměrování.

Vrácený řetězec se zobrazí v potvrzovacím okně v Chrome a IE. Tento řádek se ve Firefoxu nezobrazuje.

„událost onbeforeunload nezobrazuje text dodaný webem, pouze standardní zprávu“, soudě podle komentářů, konečně a neodvolatelně. V tomto ohledu jsem chtěl napsat něco málo o historii problematiky.

Mnoho lidí ví, že díky onbeforeunload můžete požádat uživatele, aby neopouštěl webovou stránku, pokud má neuložená data (například napsaná ve formuláři, ale neodeslanou zprávu do fóra). Chcete-li to provést, přidejte něco jako tento JavaScript:
window.onbeforeunload = function (evt) ( var message = "Dokument "foo" není uložen. Pokud stránku opustíte, změny ztratíte."; if (typeof evt == "undefined") ( evt = window.event ; ) if (evt) ( evt.returnValue = zpráva; ) vrátit zprávu; )
Poté, v ideálním případě, pokud chce uživatel stránku opustit (jakýmkoli způsobem - zavřít kartu, zavřít celý prohlížeč, znovu načíst stránku, zadat novou adresu do adresního řádku, přejít na záložku atd.), zobrazí se žádost o potvrzení a opuštění stránky může být zrušeno. Dříve se bezohlední autoři webových stránek snažili pomocí tohoto okna přelstít uživatele a udržet ho na stránce, například pomocí textu „Kliknutím na OK pokračujte v práci s webem a na Storno pro zavření“ (ve skutečnosti tlačítka fungovala jako druhá cestou kolem). Nebo dokonce něco děsivějšího jako „Kliknutím na OK potvrďte platbu ve výši 1 000 USD na vaši kreditní kartu.“

Pak prohlížeče zmoudřely a začaly přidávat pomocný text, aby bylo obtížnější uživatele oklamat. Například zde je návod, jak to dělá IE8:

Téměř podobný text byl ve Firefoxu 3:


Pokud si to všechno přečtete, je jasné, co hlásil web a co hlásil prohlížeč. Stále však můžete podvádět.


Zde vidíme přehledný popis akcí přímo na tlačítkách. Už nyní je poměrně obtížné přesvědčit uživatele, aby kliknul na „Odejít“ pro pobyt a „Zůstat“ pro odchod. Dle mého názoru je řešení ideální a toto téma lze uzavřít. Obecně, jak víte, anonymní OK v téměř každém dialogu by mělo být nahrazeno názvem akce (například „Smazat soubory“, „Hledat“, „Přidat řádek“, „Otevřít soubor“ atd.), tím se snižuje počet uživatelských chyb, i když máte plnou kontrolu nad textem dialogu.

Jaké bylo drama s chybou 641509? Faktem je, že toto potvrzení ve Firefoxu 4 a vyšším vypadá takto:


Jak vidíte, vlastní text úplně zmizel. Od verze 4 nemůže webová stránka poskytnout uživateli žádnou další zprávu ani vysvětlit, proč konkrétně nechce, aby uživatel odešel. Řekněme, že pokud implementujete rozhraní pro práci s mnoha dokumenty v jednom okně a jeden z nich není uložen, mohli byste říci, který konkrétně, ale ve Firefoxu tomu nebudete rozumět. Možná si to nechcete uložit a kdybyste tu zprávu viděli, klidně byste stránku opustili, ale jinak nevíte, co se děje. V listu

V této lekci se seznámíme s různými metodami objektu okna, které umožňují otevírat a zavírat okna, určit, zda je okno zavřené, a také získat jeho interní název atd.

Metody objektu okna jsou open() , close() , print() , focus() a blur() .

V této části se podíváme na následující metody objektu okna:

  • open() - určené k otevírání oken (záložek);
  • close() - určené k zavírání oken. Používá se hlavně k zavření oken otevřených pomocí metody open();
  • print() - navržený pro tisk obsahu okna;
  • focus() - navržený k přenesení fokusu do zadaného okna;
  • blur() - je navržen tak, aby odstranil fokus ze zadaného okna.
metoda open(). Je navržen tak, aby otevřel nové okno (kartu) v prohlížeči a má následující syntaxi:

Parametry metody:

  • První parametr určuje URL stránky, kterou je třeba načíst do tohoto okna. Pokud není hodnota tohoto parametru uvedena, zobrazí se v okně prázdná stránka (about:blank).
  • Druhý parametr metody open určuje hodnotu cílového atributu nebo název okna. Podporovány jsou následující hodnoty:
    • _blank – URL se načte do nového okna (záložka). Toto je výchozí hodnota;
    • _parent – ​​URL se načte do nadřazeného rámce. Pokud tam není, pak se URL načte do aktuálního okna (záložka);
    • _self - URL se načte do aktuálního okna;
    • _top - zruší všechny rámce a načte URL do aktuálního okna prohlížeče (záložka). Pokud tam není, pak se URL načte do aktuálního okna (záložka);
    • Jako parametr můžete také zadat název okna, které se má otevřít. Tento název je interní a mohou jej použít weboví vývojáři k volání funkcí a metod tohoto okna.
  • Třetí parametr je určen k určení sady vlastností okna, které se zadávají oddělené čárkami. Jsou podporovány následující základní vlastnosti okna:
    • vlevo , nahoře - souřadnice (v pixelech) levého horního rohu okna prohlížeče vzhledem k levému hornímu rohu obrazovky. Hodnoty těchto vlastností musí být kladné nebo rovné 0;
    • výška, šířka - výška a šířka pracovní plochy okna prohlížeče. Při zadávání hodnot je nutné vzít v úvahu, že šířka a výška okna prohlížeče nesmí být menší než 100 pixelů;
    • resizable je booleovská vlastnost okna, která je navržena tak, aby povolila nebo zakázala možnost změny velikosti okna prohlížeče. Tato vlastnost přijímá následující hodnoty: ano nebo 1 a ne nebo 0;
    • scrollbars je booleovská vlastnost okna, která se používá k povolení nebo zakázání zobrazení posuvníků pro obsah okna prohlížeče. Tato vlastnost přijímá následující hodnoty: ano nebo 1 a ne nebo 0;
    • status je logická vlastnost okna, která je určena k povolení nebo zakázání zobrazení stavového řádku prohlížeče. Tato vlastnost přijímá následující hodnoty: ano nebo 1 a ne nebo 0.

Zvažte následující příklady:

1. Otevřete prázdnou stránku about:blank v novém okně. Toto okno by mělo mít šířku a výšku 250 pixelů:

Window.open("","","width=250,height=250");

2. Otevřete webovou stránku „http://site/“ v aktuálním okně:

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

3. Otevřete nové okno s určitými vlastnostmi (top=100, left=100, width=400, height=500, scrollbars=yes, resizabie=yes):

Window.open("http://site", "_blank", "top=100, left=100, width=400, height=500, scrollbars=yes, resizable=yes");

Jak pracovat s oknem po jeho otevření?

Metoda open() umožňuje nejen otevřít okno, ale také získat odkaz na toto okno. Tento odkaz umožňuje interakci s tímto oknem voláním určitých vlastností a metod. Tito. K ovládání jiného okna můžeme použít kód JavaScript umístěný v jednom okně.

Například pro přístup k objektu dokumentu v otevřeném okně:

Otevřete prázdné nové okno a zobrazte v něm nějaký text:

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

Nějaký text

");

Poznámka: Můžete pracovat pouze s okny, která jste otevřeli, s jinými okny pracovat nemůžete.

metoda close().

Je určen k uzavření okna. Tato metoda nemá žádné parametry. Obvykle se používá k zavírání oken vytvořených metodou open(). V opačném případě, když se pokusíte zavřít okno (záložku) otevřené samotným uživatelem (ne z JavaScriptu), prohlížeč z bezpečnostních důvodů požádá uživatele o potvrzení provedení této akce.

Vytvořme například tlačítka pro otevírání a zavírání okna s názvem myWindow:

//vytvoříme proměnnou, do které budeme ukládat odkaz na objekt okna otevřeného okna var myWindow; function myWindowOpen ( myWindow = window.open("http://www.yandex.ru", "myWindow", "width=250, height=250"); ) function myWindowClose ( if (myWindow) ( myWindow.close() ; myWindow = null; ) ) Otevřít okno Zavřít okno

metoda print().

Je určen k tisku obsahu okna. Tato metoda nemá žádné parametry.

function myPrint() ( window.print(); ) Tisk stránky

metoda focus().

Je navržen tak, aby zaostřil na zadané okno. Tato metoda nemá žádné parametry.

metoda blur().

Je určen k odstranění fokusu ze zadaného okna, tzn. přesune do pozadí. Tato metoda nemá žádné parametry.

function myWindowOpen() ( var myWindow = window.open("", "", "width=200,height=100"); ) function myWindowFocus() ( myWindow.focus(); ) function myWindowBlur() ( myWindow.blur (; ) Otevřít okno Zaměřit se na okno Přesunout okno na pozadí

Vlastnosti objektu okna: název, otvírák, zavřeno.

V této části se podíváme na následující vlastnosti objektu okna:

  • jméno - slouží k získání nebo nastavení vnitřního názvu okna;
  • otvírač - umožňuje získat v aktuálním okně odkaz na okno (objekt okna), ze kterého bylo toto okno otevřeno;
  • closed je booleovská vlastnost, která vrací: true, pokud je okno zavřené, a false, pokud je okno otevřené.
vlastnost názvu

Tato vlastnost se velmi často používá ke změně vnitřního názvu okna poté, co je již otevřené. Vlastnost name může navíc vrátit aktuální hodnotu interního názvu okna.

Interní název okna není řetězec uzavřený mezi úvodní a závěrečnou značkou názvu – je to název okna, který je určen pro vývojáře. Tito. toto jméno je pro uživatele neviditelné.

Tento název se primárně používá v hypertextových odkazech a formulářích k označení okna, ve kterém má být stránka otevřena. Například k označení vnitřního názvu okna v hypertextovém odkazu se používá atribut target. Pokud má prvek a atribut target="searchWindow", pak když kliknete na tento odkaz, prohlížeč se nejprve pokusí najít okno s takový interní název (searchWindow), pokud žádná okna s takovým interním názvem neexistují, otevře nové okno a pojmenuje ho searchWindow . A pokud existuje okno se stejným názvem, neotevře se nové okno, ale stránka se znovu načte pomocí zadaného odkazu v tomto okně. Ve výchozím nastavení nemají okna prohlížeče interní název.

Otevřete si například stránku „http://www.google.com/“ v okně s názvem myWindow:

window.name = "myWindow";

Například otevřeme okno pomocí metody open() a zobrazíme v něm jeho název:

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

Toto okno má název: " + wnd.name + ".");

vlastnost otvírák

Tato vlastnost umožňuje získat v okně odkaz na původní okno (objekt okna), tzn. k oknu, ze kterého bylo okno otevřeno.

Máte například původní okno (1), ve kterém pomocí metody open() otevřete další okno (2). V tomto okně (2) můžete použít vlastnost opener k získání okna (1).

function openMyWindow() ( var myWindow=window.open("","","width=200,height=200"); myWindow.document.write("Otevřít okno (2)"); $(document).ready (function() ( updatefgallowPrompt(true); window.onbeforeunload = WarnUser; ) function WarnUser() ( var allowPrompt = getfgallowPrompt(); if(allowPrompt) ( saveIndexedDataAlert(); return null; ) else ( updatefgallowPrompt(true); událost ( )); if(allowPrompt && $.trim(lenIndexedDocs) > 0) ( event.returnValue = "Vaše zpráva"; } 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"); }!}

Poté pracoval pro mě;

$(okno).unload(funkce(událost) ( if(událost.klientY< 0) { //do whatever you want when closing the window.. } });

Window.onbeforeunload = function () ( return "Opravdu chcete zavřít?"; );

Snad jen obslužná rutina události beforeunload v obslužné rutině události odeslání formuláře:

JQuery("form").submit(function() ( jQuery(window).unbind("beforeunload"); ... ));

2

Mám jednu nadřazenou stránku a podřízenou stránku. podřízená stránka otevřena na nové kartě

Chci zobrazit jednu varovnou zprávu (podřízená stránka se zavře), když zavřu podřízenou kartu.
Jak zobrazit zavřené zprávy při zavírání karty? (Není to osvěžující čas)

Použil jsem OnUnload a onbeforeunload .
Tyto dvě metody se také volají při obnovování stránky a zavírání karet.

Window.onunload = funkce doUnload(e) ( alert("Dětské okno se zavírá..."); )

Window.onbeforeunload = funkce doUnload(e) ( alert("Dětské okno se zavírá..."); )

Musím zobrazit varovnou zprávu, stačí zavřít kartu v prohlížeči.

Pomoz mi. Díky předem.

Používám následující skript. V IE to fungovalo. Ale nefungovalo to ve FireFoxu

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

Jak toho dosáhnout ve FireFoxu a dalších prohlížečích.

  • 4 odpovědi
  • řazení:

    Aktivita

1

Pro tento afaik nikdy nebyl scénář pro různé prohlížeče. Řešením je nespoléhat se na nezdokumentované a proměnlivé funkce specifické pro prohlížeč k detekci čehokoli důležitého.

Vzhledem k tomu, že máte stránku CHILD, můžete nastavit test na nadřazeném prvku (otvíracím nástroji), který v intervalech kontroluje vlastnost childWindowHandle.closed a podle toho pracuje.

1

Za předpokladu, že se to jen pokusí spustit událost beforeunload Crossbrowser, tak to do značné míry udělá (kromě Opery)

Try( // http://www.opera.com/support/kb/view/827/ opera.setOverrideHistoryNavigationMode("kompatibilní"); history.navigationMode = "kompatibilní"; )catch(e)() //Our Where Funkce F" Are You Going Message ReturnMessage() ( return "WTF!!!"; ) //Funkce UnBind Function UnBindWindow() ( window.onbeforeunload = null; return true; ) //Bind Links, které nechceme ovlivnit .getElementById("homebtn").onclick = UnBindWindow; document.getElementById("googlebtn").onclick = UnBindWindow; //Bind Exit Message Dialogue window.onbeforeunload = ReturnMessage;

0

Možná to nebudete moci udělat, s výjimkou některých metod založených na souborech cookie, což je práce na vývoji řešení jako netrvalé soubory cookie. Druhá identifikace obnovení stránky, přesměrování založeného na formuláři nebo zpětného přesměrování nebo uzavření prohlížeče s dumpingem událostí není jednoduché a zdlouhavé. Doporučuji nespoléhat se na toto.

můžete udělat několik malých věcí, než klient zavře kartu. javascript detekuje prohlížeč zavřít kartu/zavřít prohlížeč , ale pokud je váš seznam akcí velký a karta se zavře před dokončením, jste bezmocní. Zkusit to můžeš, ale podle mých zkušeností to na tom nezávisí. Ano, v tuto chvíli nelze rozlišit zpět, aktualizovat a zavřít. Proto neexistuje žádný spolehlivý způsob, jak zjistit, zda je dítě skutečně uzavřené.

Window.addEventListener("beforeunload", funkce (e) ( var potvrzeníMessage = "\o/"; /* Máte zde malý kód akce */ (e || window.event).returnValue = potvrzeníMessage; //Gecko + IE vrátit potvrzující zprávu; //Webkit, Safari, Chrome ));