๐ window.history.pushState์ history.replaceState์ ์์๋ณด์
history.pushState()
๋ ๋ธ๋ผ์ฐ์ ์ ์ธ์
๊ธฐ๋ก ์คํ์ ์๋กญ๊ฒ ์ถ๊ฐํ๋ค. ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ์๋ฐ, (pushState(state, unused, url?)
) state
๋ ์ฌ์ฉ์๊ฐ ์๋ก์ด ํ์ด์ง๋ก ์ด๋ํ ๋๋ง๋ค popstate
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค. unused
๋ ์ญ์ฌ์ ์ด์ ๋ก ์กด์ฌํ๋ฉฐ, ์๋ตํ ์ ์๋ค. ์ถํ์ ๋ณ๊ฒฝ ์์ ์ด๋ฏ๋ก ๋น๋ถ๊ฐ ๋น ๋ฌธ์์ด('')์ ์ฌ์ฉํ์. url
์ ์ฌ์ฉํ๋ฉด ํด๋น URL
๋ก ์ด๋ํ์ง ์์ง๋ง, ๋์ค์ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ ์์ํ๋ฉด ํด๋น URL
๋ก๋๋ฅผ ์๋ํ ์ ์๋ค. ๋ฐํ ๊ฐ์ undefined
์ด๋ค.
ํฌ์ธํธ๋ URL
๊ฐ์ ํ์ฌ URL
๊ณผ ๋์ผํ ์ถ์ฒ(same origin
)์ฌ์ผ ํ๋๋ฐ, ์๋ฅผ ๋ค์ด ํ์ฌ ํ์ด์ง๊ฐ www.google.com
์ธ๋ฐ, history.pushState({ foo: 'bar' }, "", 'https://www.naver.com/')
์ ์ฌ์ฉ ํ ์ ์๋ค. ๋ง์ฝ, ์ธ๋ถ URL์ ํธ์ถํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
history.pushState()
์ window.location = "#foo"
์ ํ์ฌ ํ์ด์ง์ history
๋ฅผ ์์ฑํ๋๊ฒ์ ๊ฐ์ง๋ง, history.pushState()
์ ์ด์ (advantage
)์ด ์กฐ๊ธ ๋ ํฌ๋ค.
history.pushState()
์์ ์ฌ์ฉํ๋URL
์same origin
์ด๋ค. ๋ฐ๋ฉดwindow.location
์hash
๋ง ์์ ํ๋ ๊ฒฝ์ฐ์ ๋์ผํ ํ์ด์ง๋ก ์ ์ง๋๋ค.- ์ธ ๋ฒ์งธ ์ธ์์
URL
์optional
์ด์ง๋ง,window.location = "#foo"
์ ๊ฐ์ ๊ฒฝ์ฐ๋ ํ์ฌhash
๊ฐ์ด#foo
๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ์๋ก์ดhistory
๋ฅผ ๋ง๋ ๋ค. - ์์์ ๋ฐ์ดํฐ๋ฅผ ์
history
ํญ๋ชฉ์ ์ฐ๊ฒฐํ ์ ์๋ค.hash
๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ์ธ์ฝ๋ฉํด์ผ ํ๋ค. - ์ URL์ด ์ด์ URL๊ณผ ํด์๋ง ๋ฌ๋ผ๋
pushState()
๋ ์ ๋hashchange
์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค.
history.replaceState()
๋ history.pushState()
์ ๋น์ทํ์ง๋ง, ํ depth
์ session history
๋ฅผ ๋ณ๊ฒฝํ๋ค๋ ์ ์์ history.pushState()
์ ๋ค๋ฅด๋ค. (history.pushState()
๋ session history
์ ์๋ก์ด ์ธ์
๊ธฐ๋ก์ ์ถ๊ฐํ๋ค.) ๋ฌธ๋ฒ์ history.pushState()
์ ๋์ผํ๊ฒ replaceState(stateObj, un(used, url?)
๋ก ์์ฑํ๋ค. ๋ฐํ ๊ฐ์ undefined
์ด๋ค.
์๋ฅผ ๋ค์ด ํ์ฌ ํ์ด์ง(https://www.mozilla.org/foo.html
)์์ ์ ํญ์ ๋ค์์ ์
๋ ฅํด๋ณด์. history.pushState({ foo: 'bar' }, '', 'bar.html');
๊ทธ๋ฐ ํ ์ฝ์์ฐฝ์ history
๋ฅผ ์
๋ ฅํ๋ฉด ์ฌ์ ํ length
๊ฐ 1๊ฐ์ธ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ ์ ์๋ ์ ์ history.pushState()
์ ๋ค๋ฅด๊ฒ session history
์ ์๋ก์ด history
๋ฅผ ์ถ๊ฐํ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด์ ์๋ session history
๊ฐ์ ๋ฐฉ๊ธ ์ ์ธํ ๊ฐ์ผ๋ก ๋์ฒดํ ๊ฒ์ด๋ค. ๋ history
์ state
๋ฅผ ๋ณด๋ฉด ๊ธฐ์กด์ ์๋ state: { foo: 'bar' }
๊ฐ ์๊ธด ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ค์ history.replaceState({ bar: 'baz' },'', 'bar2.html')
๋ฅผ ์
๋ ฅํด๋ณด๋ฉด ์ฌ์ ํ length
๊ฐ 1๊ฐ์ด๋ค. ์์๋์ด์ผ ํ ์ ์ ์ธ ๋ฒ์งธ ์ธ์์ธ URL
ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ๋๋ค๊ณ ํด๋ ๋ธ๋ผ์ฐ์ ๋ bar2.html
๊ฐ ์กด์ฌํ๋์ง ํ์ธํ์ง ์๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ฃผ์ ํ์์ฐฝ์ www.naver.com
์ ์
๋ ฅํ์ฌ ์ํฐ๋ฅผ ํด๋ฆญํ๊ณ ๋ธ๋ผ์ฐ์ ์ ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ง์ง๋ง์ ์์ฑํ bar2.html
์ด ๋์ค๊ณ ํ๋ฒ ๋ ๋ค๋ก ๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด bar.html
๋์ foo.html
๊ฐ ๋์ค๊ณ bar.html
์ ์์ ํ ์ฐํํ๋ค๋ ์ ์ ์ ์ ์๋ค.
Reference
๋๊ธ