Window: beforeunload ì´ë²¤í¸
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Want more support for this feature? Tell us why.
beforeunload ì´ë²¤í¸ë window, 문ì(document) ë° í´ë¹ 리ìì¤ê° ì¸ë¡ë(unload) ëë ¤ê³ í ë ììë©ëë¤. 문ìë ê³ì ë³´ì´ê³ ìì¼ë©° ì´ë²¤í¸ë ì´ ìì ììë ì·¨ìí ì ììµëë¤.
ì´ ì´ë²¤í¸ë¥¼ ì¬ì©íë©´ ì¹ íì´ì§ìì ì¬ì©ììê² ì¤ì ë¡ íì´ì§ë¥¼ ë ë ê²ì¸ì§ 묻ë íì¸ ëí ìì를 íìí ì ììµëë¤. ì¬ì©ìê° íì¸ ë²í¼ì ë를 ê²½ì° ë¸ë¼ì°ì ë ì íì´ì§ë¡ ì´ëíê³ ê·¸ë ì§ ìì¼ë©´ íìì ì·¨ìíê³ íì¬ íì´ì§ì ë¨¸ë¬´ë¦ ëë¤.
ëª
ì¸ì ë°ë¼ íì¸ ëí ìì를 íìíë ¤ë©´ ì´ë²¤í¸ í¸ë¤ë¬ê° ì´ë²¤í¸ìì preventDefault()를 í¸ì¶í´ì¼ í©ëë¤.
HTML ëª
ì¸ìë ì´ ì´ë²¤í¸ ëì window.alert(), window.confirm(), ë° window.prompt() ë©ìëì ëí í¸ì¶ì´ 무ìë ì ìë¤ê³ ëª
ìëì´ ììµëë¤. ìì¸í ë´ì©ì HTML ëª
ì¸ì ì°¸ê³ íì¸ì.
구문
addEventListener()ì ê°ì ë©ìëìì ì´ë²¤í¸ ì´ë¦ì ì¬ì©íê±°ë ì´ë²¤í¸ í¸ë¤ë¬ ìì±ì ì¤ì í©ëë¤.
addEventListener("beforeunload", (event) => {});
onbeforeunload = (event) => {};
ì´ë²¤í¸ íì
BeforeUnloadEvent ì´ë²¤í¸ë Eventìì ììë©ëë¤.
ì´ë²¤í¸ ì²ë¦¬ê¸° ë³ì¹(alias)
Window ì¸í°íì´ì¤ ë¿ë§ ìëë¼ ì´ë²¤í¸ í¸ë¤ë¬ ìì± onbeforeunloadë ì¬ì©í ì ììµëë¤.
ë³´ì
ìì ì¬ì©ì íì±íê° íìí©ëë¤. beforeunload ì´ë²¤í¸ê° ëìí기 ìí´ì ì¬ì©ìê° íì´ì§ ëë UI ììì ìí¸ ìì©í´ì¼ í©ëë¤.
ì¬ì© ì¼ë
beforeunload ì´ë²¤í¸ë unload ì´ë²¤í¸ì ëì¼í 문ì ê° ììµëë¤.
í¹í 모ë°ì¼ìì beforeunload ì´ë²¤í¸ë ìì ì ì¼ë¡ ì¤íëì§ ììµëë¤. ì를 ë¤ë©´, ë¤ìì ìë리ì¤ììë beforeunload ì´ë²¤í¸ê° ì í ë°ìíì§ ììµëë¤.
- 모ë°ì¼ ì¬ì©ìê° íì´ì§ë¥¼ 방문í©ëë¤.
- ê·¸ë° ë¤ì ì¬ì©ìê° ë¤ë¥¸ ì±ì¼ë¡ ì íí©ëë¤.
- ëì¤ì ì¬ì©ìë ì± ê´ë¦¬ììì ë¸ë¼ì°ì 를 ë«ìµëë¤.
beforeunload ì´ë²¤í¸ë back/forward cache (bfcache)ì í¸íëì§ ììµëë¤. ì´ ì´ë²¤í¸ë¥¼ ì¬ì©íë ë§ì íì´ì§ê° ì´ë²¤í¸ íì íì´ì§ê° ë ì´ì ì¡´ì¬íì§ ìì ê²ì´ë¼ê³ ê°ì í기 ë문ì
ëë¤. ì´ë¥¼ ë°©ì§í기 ìí´ ë¸ë¼ì°ì ë beforeunload ìì 기(listener)ê° ìë ê²½ì° bfcacheì íì´ì§ë¥¼ ë°°ì¹íì§ ìì¼ë©° ì´ë ì±ë¥ì ì¢ì§ ììµëë¤.
ê·¸ë¬ë unload ì´ë²¤í¸ì ë¬ë¦¬ beforeunload ì´ë²¤í¸ìë í©ë²ì ì¸ ì¬ì© ì¬ë¡ê° ììµëë¤. ì¬ì©ìê° íì´ì§ìì ë°ì´í°ë¥¼ ì
ë ¥í ì ì¥íì§ ìê³ ì´í(unload) í ë ë°ì´í°ê° ìì¤ëë ê²½ì°ì ìë리ì¤ì
ëë¤.
ê°ë°ìë ì±ë¥ì 미ì¹ë ìí¥ì ìµìíí기 ìí´ ì´ ìë리ì¤ìì ì¤ì ë¡ ì ì¥ëì§ ìë ë³ê²½ ì¬íì´ ìì ëë§ beforeunload를 ìì íë ê²ì´ ì¢ìµëë¤. ì´ì ëí ìë ìëì ìì ì¹ì
ì 참조íì¸ì.
beforeunload ì´ë²¤í¸ì ê´ë ¨ë 문ì ì ëí ë ë§ì ì ë³´ë íì´ì§ ë¼ì´íì¬ì´í´ API ê°ì´ë를 ì°¸ê³ íì¸ì.
ìì
ì´ ìì ìì íì´ì§ë input í
ì¤í¸ì ëí ë³ê²½ ì¬íì ìì í©ëë¤. ë§ì½ ììì ê°ì´ í¬í¨ëì´ ìì¼ë©´ beforeunloadì ëí ìì 기(listener)를 ì¶ê°í©ëë¤. ë§ì½ ììê° ë¹ì´ìì¼ë©´ ìì 기를 ì ê±°í©ëë¤.
const beforeUnloadListener = (event) => {
event.preventDefault();
return (event.returnValue = "");
};
const nameInput = document.querySelector("#name");
nameInput.addEventListener("input", (event) => {
if (event.target.value !== "") {
addEventListener("beforeunload", beforeUnloadListener, { capture: true });
} else {
removeEventListener("beforeunload", beforeUnloadListener, {
capture: true,
});
}
});
ëª ì¸
| Specification |
|---|
| HTML > # event-beforeunload > |
| HTML > # handler-window-onbeforeunload > |
ë¸ë¼ì°ì í¸íì±
WindowEventHandlers.onbeforeunloadìì ê°ê°ì ë¸ë¼ì°ì ê° beforeunload를 ì´ë»ê² ì²ë¦¬íëì§ ìì¸í ììë³´ì¸ì.
í¸íì± ì°¸ê³ ì¬í
HTML ëª
ì¸ìë ê°ë°ìê° Event.returnValue를 ì¬ì©íì¬ ì¬ì©ììê²
ë©ìì§ë¥¼ íìíë ëì Event.preventDefault() ë©ìë를 ì¬ì©í´ì¼ íë¤ê³
ëª
ìëì´ ììµëë¤. ê·¸ë¬ë ìì§ ëª¨ë ë¸ë¼ì°ì ìì ì§ìíê³ ìì§ë ììµëë¤.
ì´ ì´ë²¤í¸ê° null ëë undefined ì´ì¸ì ê°ì ë°í(ëë returnValue ìì±ì ì¤ì )íë©´
íì´ì§ ì¸ë¡ë를 íì¸íë¼ë ë©ìì§ê° ì¬ì©ììê² íìë©ëë¤. ì¤ëë ë¸ë¼ì°ì ììë ì´ë²¤í¸ì
ë°í ê°ì´ íìë©ëë¤. Firefox 44, Chrome 51, Opera 38, ë° Safari 9.1 ì´íë¡ ë°íë 문ìì´ ëì
ì¹ íì´ì§ìì ì ì´í ì ìë 문ìì´ì´ íìë©ëë¤. ì를ë¤ë©´ ìëì ê°ìµëë¤.
- Firefoxë "This page is asking you to confirm that you want to leave - data you have entered may not be saved."ë¼ë 문ìì´ì íìí©ëë¤(Firefox ë²ê·¸ 588292를 íì¸íì¸ì).
- Chromeì "Do you want to leave the site? Changes you made may not be saved."ë¼ë 문ìì´ì íìí©ëë¤(Chrome íë«í¼ ìí를 íì¸íì¸ì).
ì¼ë¶ ë¸ë¼ì°ì ìì window.alert(),
window.confirm(), ë° window.prompt() í¸ì¶ì beforeunload ì´ë²¤í¸ê°
ì§íëë ëì 무ìë ì ììµëë¤. ìì¸í ë´ì©ì HTML ëª
ì¸ë¥¼ íì¸íì¸ì.
ëí ë¤ìí ë¸ë¼ì°ì ë ì´ë²¤í¸ 결과를 무ìíê³ ì¬ì©ììê² íì¸ì ì í ìì²íì§ ììµëë¤. ì´ë¬í ê²½ì°
문ìë íì ìëì¼ë¡ ì¸ë¡ë ë©ëë¤. Firefoxë ì´ ëìì íì±í í기 ìí´ about:config ì
dom.disable_beforeunloadë¼ë ì¤ìì¹ê° ììµëë¤. Chrome 60ë¶í°ë íë ìì´ë íì´ì§ê° ë¡ëë ì´í
ì¬ì©ìê° ì ì¤ì²ë¥¼ ìííì§ ìì ê²½ì° íì¸ì ê±´ëëëë¤.
íì´ì§ìì F5를 ë르ë ê²ì ì¬ì©ì ìí¸ìì©ì¼ë¡ ê°ì£¼ëë ë°ë©´ ìë¡ê³ 침 íì´í를 ë§ì°ì¤ë¡ í´ë¦íê±°ë
Chrome DevToolsì í¬ì»¤ì¤ê° ìë ìíìì F5를 ë르ë ê²ì ì¬ì©ì ìí¸ìì©ì¼ë¡ ê°ì£¼ëì§ ììµëë¤
(Chrome 81 기ì¤ì
ëë¤).
ê°ì´ 보기
- ê´ë ¨ ì´ë²¤í¸:
DOMContentLoaded,readystatechange,load,unload - Unloading Documents â Prompt to unload a document
- Remove Custom Messages in onbeforeload Dialogs after Chrome 51
- Don't lose user and app state, use Page Visibilityë
beforeunload/unloadê° ìëvisibilitychange를 ì¬ì©í´ì¼ íë ì´ì 를 ìì¸í ì¤ëª í©ëë¤. - Page Lifecycle APIë ì¹ ì í리ì¼ì´ì ìì íì´ì§ ìëª ì£¼ê¸° ëìì ì²ë¦¬íë ëª¨ë² ì¬ë¡ ì§ì¹¨ì ì ê³µí©ëë¤.
- PageLifecycle.jsë íì´ì§ ìëª ì£¼ê¸° ëìì ë¸ë¼ì°ì ê° ë¶ì¼ì¹ë¥¼ ì²ë¦¬íë JavaScript ë¼ì´ë¸ë¬ë¦¬ì ëë¤.
- Back/forward cacheë back/forward ìºìê° ë¬´ìì´ë©° ë¤ìí íì´ì§ ìëª ì£¼ê¸° ì´ë²¤í¸ì 미ì¹ë ìí¥ì ì¤ëª í©ëë¤.