์๋ฐ์คํฌ๋ฆฝํธ ๋ค๋ก๊ฐ๊ธฐ ์ด๋ฒคํธ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ
์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น์?
๋ค๋ก๊ฐ๊ธฐ๋ผ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋จ์ํ "ํ์ด์ง ์ด๋"์ผ๋ก๋ง ์๊ฐํฉ๋๋ค. ํ์ง๋ง ์กฐ๊ธ ๋ ๊น์ด ๋ค์ฌ๋ค๋ณด๋ฉด, ์ด ์งง์ ์๊ฐ์ ์๋ง์ ์ฌ์ฉ์ ๊ฒฝํ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค. ์์ฑ ์ค์ด๋ ๊ธ์ด ๋ ์๊ฐ๊ฑฐ๋, ๊ฒฐ์ ๊ณผ์ ์ด ๋๊ธฐ๊ฑฐ๋, ์ฌ์ง์ด ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์๋ ์์ด์. ๐ฐ
์ค๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ค๋ก๊ฐ๊ธฐ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ , ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ์ด๋ป๊ฒ ๊ฐ์ ํ ์ ์๋์ง ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. ๐
popstate ์ด๋ฒคํธ๋ก ์ฒ๋ฆฌํ๊ธฐ
๋ธ๋ผ์ฐ์ ๋ ์ฃผ์(URL) ๋ณ๊ฒฝ์ด๋ ์ธ์
ํ์คํ ๋ฆฌ ๋ณํ๊ฐ ์์ ๋ popstate ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค.
์ด ์ด๋ฒคํธ๋ฅผ ํ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ ๋์ง ๊ฐ์งํ ์ ์์ต๋๋ค.
popstate์ด๋ฒคํธ๋ ์ฌ์ฉ์์ ์ธ์ ๊ธฐ๋ก ํ์์ผ๋ก ์ธํด ํ์ฌ ํ์ฑํ๋ ๊ธฐ๋ก ํญ๋ชฉ์ด ๋ฐ๋ ๋ ๋ฐ์ํฉ๋๋ค. ๋ง์ฝ ํ์ฑํ๋ ์ํธ๋ฆฌ๊ฐhistory.pushState()๋ฉ์๋๋history.replaceState()๋ฉ์๋์ ์ํด ์์ฑ๋๋ฉด,popstate์ด๋ฒคํธ์state์์ฑ์ ํ์คํ ๋ฆฌ ์ํธ๋ฆฌstate๊ฐ์ฒด์ ๋ณต์ฌ๋ณธ์ ๊ฐ๊ฒ ๋ฉ๋๋ค
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํด๋ณผ ์ ์์ด์ !
window.addEventListener("popstate", (event) => {
console.log("๋ค๋ก๊ฐ๊ธฐ ๋ฐ์!", event);
});
๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฅด๊ฒ ๋์ํ ์ ์์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํฉ๋๋ค !
๋ธ๋ผ์ฐ์ ๋ popstate ์ด๋ฒคํธ๋ฅผ ํ์ด์ง ๋ก๋ฉ์์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. Chrome(v34 ์ด์ ๋ฒ์ ) ์ Safari๋ popstate ์ด๋ฒคํธ๋ฅผ ํ์ด์ง ๋ก๋ฉ์์ ๋ฐ์์ํต๋๋ค. ํ์ง๋ง Firefox ๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
๋ง์ฝ alert์ ๊ฐ์ด ์ธํฐ๋ฝํธ๊ฐ ํ์ํ๋ค๋ฉด? beforeunload ์ด๋ฒคํธ๋ก ์ฒ๋ฆฌํ๊ธฐ
ํน์ beforeunload๋ก ์ฒ๋ฆฌํด๋ณผ ์๋ ์์ด์. ํด๋น ์ด๋ฒคํธ๋ window, ๋ฌธ์(document) ๋ฐ ํด๋น ๋ฆฌ์์ค๊ฐ ์ธ๋ก๋ ๋๋ ค๊ณ ํ ๋ ์คํ๋ฉ๋๋ค ! ๐ช
window.addEventListener("beforeunload", (e) => {
const message = "์์ฑ ์ค์ธ ๋ด์ฉ์ด ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ ๋ง ๋๊ฐ์๊ฒ ์ต๋๊น?";
e.returnValue = message; // ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ๋์
return message;
});
ํ์ํ ์ํฉ์ ๋ฐ๋ผ ์ ์ฉํด๋ณผ ์ ์์๊ฑฐ์์ ! ๐