ìë°ì¤í¬ë¦½í¸ë 본ë ì¹ ë¸ë¼ì°ì ìì ì¬ì©íë ¤ê³ ë§ë ì¸ì´ì ëë¤. ì´í ì§í를 ê±°ì³ ë¤ìí ì¬ì©ì²ì íë«í¼ì ì§ìíë ì¸ì´ë¡ ë³ëª¨íììµëë¤.
ìë°ì¤í¬ë¦½í¸ê° ëìê°ë íë«í¼ì í¸ì¤í¸(host) ë¼ê³ ë¶ë¦½ëë¤. í¸ì¤í¸ë ë¸ë¼ì°ì , ì¹ìë², ì¬ì§ì´ë ì»¤í¼ ë¨¸ì ì´ ë ìë ììµëë¤. ê° íë«í¼ì í´ë¹ íë«í¼ì í¹ì ëë 기ë¥ì ì ê³µíëë°, ìë°ì¤í¬ë¦½í¸ ëª ì¸ììì ì´ë¥¼ í¸ì¤í¸ íê²½(host environment) ì´ë¼ê³ ë¶ë¦ ëë¤.
í¸ì¤í¸ íê²½ì ëê·ì§ ì½ì´(ECMAScript â ì®ê¸´ì´)ì ëíì¬ íë«í¼ì í¹ì ëë ê°ì²´ì í¨ì를 ì ê³µí©ëë¤. ì¹ë¸ë¼ì°ì ë ì¹íì´ì§ë¥¼ ì ì´í기 ìí ìë¨ì ì ê³µíê³ , Node.jsë ìë² ì¬ì´ë 기ë¥ì ì ê³µí´ì£¼ì£ .
ìë 그림ì í¸ì¤í¸ íê²½ì´ ì¹ ë¸ë¼ì°ì ì¼ ë ì¬ì©í ì ìë 기ë¥ì ê°ê´ì ì¼ë¡ ë³´ì¬ì¤ëë¤.
ìµìë¨ì windowë¼ ë¶ë¦¬ë â루í¸â ê°ì²´ê° ììµëë¤. window ê°ì²´ë 2ê°ì§ ìí ì í©ëë¤.
- ì ì ê°ì²´ ì±í°ìì ì¤ëª í ë°ì ê°ì´, ìë°ì¤í¬ë¦½í¸ ì½ëì ì ì ê°ì²´ì ëë¤.
- 'ë¸ë¼ì°ì ì°½(browser window)'ì ëë³íê³ , ì´ë¥¼ ì ì´í ì ìë ë©ìë를 ì ê³µí©ëë¤.
ìë ìììì window ê°ì²´ë¥¼ ì ì ê°ì²´ë¡ ì¬ì©íê³ ììµëë¤.
function sayHi() {
alert("ìë
íì¸ì.");
}
// ì ì í¨ìë ì ì ê°ì²´(window)ì ë©ìëì
window.sayHi();
ìë ìììì window ê°ì²´ê° ë¸ë¼ì°ì ì°½ì ëë³íê³ ìì¼ë©°, ì´ë¥¼ ì´ì©í´ ì°½ì ëì´ë¥¼ ì¶ë ¥í©ëë¤.
alert(window.innerHeight); // ì°½ ë´ë¶(inner window) ëì´
window ê°ì²´ì ë¤ìí ë©ìëì íë¡í¼í°ê° ìëë°, ì¶í ìì¸í ì´í´ë³´ëë¡ íê² ìµëë¤.
문ì ê°ì²´ 모ë¸(DOM)
문ì ê°ì²´ 모ë¸(Document Object Model, DOM)ì ì¹ íì´ì§ ë´ì 모ë ì½í ì¸ ë¥¼ ê°ì²´ë¡ ëíë´ì¤ëë¤. ì´ ê°ì²´ë ìì ê°ë¥í©ëë¤.
document ê°ì²´ë íì´ì§ì 기본 âì§ì
ì â ìí ì í©ëë¤. document ê°ì²´ë¥¼ ì´ì©í´ íì´ì§ ë´ ê·¸ 무ìì´ë ë³ê²½í ì ìê³ , ìíë ê²ì ë§ë¤ ìë ììµëë¤.
ìì:
// ë°°ê²½ì ë¶ììì¼ë¡ ë³ê²½í기
document.body.style.background = "red";
// 1ì´ í ììíë¡ ë³µêµ¬í기
setTimeout(() => document.body.style.background = "", 1000);
문ì ê°ì²´ 모ë¸ì ìììì ìê°í document.body.style ì¸ìë ìë§ì 기ë¥ì ì ê³µí©ëë¤. ê´ë ¨ íë¡í¼í°ì ë©ìëì ëí ì ë³´ë WHATWGì DOM Living Standardìì ì°¾ì ì ììµëë¤.
DOM ëª ì¸ìì 문ìì 구조ì ì´ë¥¼ ì¡°ìí ì ìë ê°ì²´ì ëí ì¤ëª ì´ ë´ê²¨ììµëë¤. ê·¸ë°ë° ë¸ë¼ì°ì ê° ìë ê³³ììë DOMì ì¬ì©íë ê²½ì°ê° ììµëë¤.
HTML íì´ì§ë¥¼ ë¤ì´ë¡ëíê³ ì´ë¥¼ ê°ê³µí´ì£¼ë ìë² ì¬ì´ë ì¤í¬ë¦½í¸ììë DOMì ì¬ì©í©ëë¤. ì´ë° ì¤í¬ë¦½í¸ìì ëª ì¸ì ì¼ë¶ë§ì ì§ìíê² ì§ë§ì.
CSS ê·ì¹ê³¼ ì¤íì¼ìí¸(stylesheet)ë HTMLê³¼ë ë¤ë¥¸ 구조를 ë±ëë¤. ë°ë¼ì CSS ê·ì¹ê³¼ ì¤íì¼ìí¸ë¥¼ ê°ì²´ë¡ ëíë´ê³ ì´ ê°ì²´ë¥¼ ì´ë»ê² ì½ê³ ì¸ ì ììì§ì ëí ì¤ëª ì ë´ì ë³ëì ëª ì¸ì, CSS ê°ì²´ 모ë¸(CSS Object Model, CSSOM)ì´ ì¡´ì¬í©ëë¤.
CSSOMì 문ìì ì°ì´ë ì¤íì¼ ê·ì¹ì ìì í ë DOMê³¼ í¨ê» ì°ì ëë¤. ê·¸ë°ë° CSS ê·ì¹ì ëë¶ë¶ ì ì ì´ê¸° ë문ì CSSOMì ì¤ë¬´ìì ì주 ì íì§ë ìì ê²ëë¤. ìë°ì¤í¬ë¦½í¸ë¥¼ ì´ì©í´ CSS ê·ì¹ì ì¶ê° í¹ì ì ê±°í´ì¼ íë ê²½ì°ë ê·¹í ë물긴 íì§ë§, ì´ë CSSOMì´ ì¬ì©ë©ëë¤.
ë¸ë¼ì°ì ê°ì²´ 모ë¸(BOM)
ë¸ë¼ì°ì ê°ì²´ 모ë¸(Browser Object Model, BOM)ì 문ì ì´ì¸ì 모ë ê²ì ì ì´í기 ìí´ ë¸ë¼ì°ì (í¸ì¤í¸ íê²½)ê° ì ê³µíë ì¶ê° ê°ì²´ë¥¼ ëíë ëë¤.
ìì:
- navigator ê°ì²´ë ë¸ë¼ì°ì ì ì´ìì²´ì ì ëí ì 보를 ì ê³µí©ëë¤. ê°ì²´ì ë¤ìí íë¡í¼í°ê° ìëë°, ê°ì¥ ì ìë ¤ì§ íë¡í¼í°ë íì¬ ì¬ì© ì¤ì¸ ë¸ë¼ì°ì ì 보를 ìë ¤ì£¼ë
navigator.userAgentì ë¸ë¼ì°ì ê° ì¤í ì¤ì¸ ì´ìì²´ì (Windows, Linux, Mac ë±) ì 보를 ìë ¤ì£¼ënavigator.platformì ëë¤. - location ê°ì²´ë íì¬ URLì ì½ì ì ìê² í´ì£¼ê³ ìë¡ì´ URLë¡ ë³ê²½(redirect)í ì ìê² í´ì¤ëë¤.
ìë ììë location ê°ì²´ë¥¼ ì´ë»ê² íì©í ì ììì§ ë³´ì¬ì¤ëë¤.
alert(location.href); // íì¬ URLì ë³´ì¬ì¤
if (confirm("ìí¤í¼ëì íì´ì§ë¡ ê°ìê² ìµëê¹?")) {
location.href = "https://wikipedia.org"; // ìë¡ì´ íì´ì§ë¡ ëì´ê°
}
alert/confirm/prompt ìì BOMì ì¼ë¶ì
ëë¤. 문ìì ì§ì ì°ê²°ëì´ ìì§ ìì§ë§, ì¬ì©ìì ë¸ë¼ì°ì ì¬ì´ì 커뮤ëì¼ì´ì
ì ëì주ë ìì ë¸ë¼ì°ì ë©ìëì´ì£ .
BOMì HTML ëª ì¸ìì ì¼ë¶ì ëë¤.
BOMì ê´ë ¨ë ëª ì¸ê° ë°ë¡ ìì§ë ììµëë¤. https://html.spec.whatwg.orgìì ë³¼ ì ìë HTML ëª ì¸ìë íê·¸, HTML ìì±(attribute) ê°ì âHTMLâ ë¿ë§ ìëë¼ ë¤ìí ê°ì²´ì ë©ìë, ë¸ë¼ì°ì ììë§ ì¬ì©ëë DOM íì¥ì ë¤ë£¹ëë¤. ì´ ëª¨ë ê²ì´ HTML 기ì ì ìí기 ë문ì ëë¤. HTML ëª ì¸ìì ì´ ì¸ìë https://spec.whatwg.orgì ìë ë´ì©ë ë¤ì´ê°ëë¤.
ìì½
íì¤ì ëíì¬ ì´ì¼ê¸°íë©´ì ë¤ì ëª ì¸ìë¤ì ììë³´ììµëë¤.
- DOM ëª ì¸ì
- 문ì 구조, ì¡°ì, ì´ë²¤í¸ì ê´í ì¤ëª ì´ ë´ê²¨ìê³ , https://dom.spec.whatwg.orgìì ë³¼ ì ììµëë¤.
- CSSOM ëª ì¸ì
- ì¤íì¼ìí¸ì ì¤íì¼ ê·ì¹, ì´ ëì ì´ë»ê² ì¡°ìí ì ìëì§, ì´ ëê³¼ 문ì ì¬ì´ì ê´ê³ë¥¼ ì´ë»ê² ì¡°ìí ì ìëì§ì ëí ì¤ëª ì´ ë´ê²¨ìê³ , https://www.w3.org/TR/cssom-1/ìì ë³¼ ì ììµëë¤.
- HTML ëª ì¸ì
- íê·¸ ë±ì HTML ì¸ì´,
setTimeout,alert,locationë±ì ë¤ìí ë¸ë¼ì°ì 기ë¥ì ì ìí BOMì ëí ì¤ëª ì´ ë´ê²¨ìê³ , https://html.spec.whatwg.orgìì ë³¼ ì ììµëë¤. DOM ëª ì¸ìì ë¤ìí íë¡í¼í°ì ë©ìë를 ì¶ê°í´ íì¥í ëª ì¸ìì ëë¤.
ëªëª í´ëì¤ì ëí ì¤ëª ì https://spec.whatwg.org/ìì íì¸í ì ììµëë¤.
ë°°ì¸ ê² ë§ì§ë§, 모ë 걸 í꺼ë²ì ë¤ë£¨ê³ 기ìµí기ì ê·¸ ìì´ ë무 ë§ê¸° ë문ì ì§ê¸ê¹ì§ ìê°í´ ë린 ë§í¬ë¥¼ ì 기ë¡í´ ëì¼ì기 ë°ëëë¤.
íë¡í¼í°ë ë©ìëì ëí ì¤ëª ì ì½ê³ ì¶ì ë Mozilla ì¬ë¨ì 매ë´ì¼ https://developer.mozilla.org/en-US/searchì ì°¾ìë³´ë ê²ë ì¢ê¸´ íì§ë§, ëª ì¸ììì ê´ë ¨ ì¤ëª ì ì°¾ë ê² ë ëì ëë ì기 ë문ì ëë¤. ëª ì¸ìì ìë ì¤ëª ì ë³µì¡íê³ ë´ì©ë ë ë§ê¸´ íì§ë§ ëª ì¸ì를 ì½ë ìµê´ì ë¤ì´ë¤ ë³´ë©´ 기본 ì§ìì íííê² ìì ì ììµëë¤.
ê²ìì°½ì âWHATWG [ì©ì´]â í¹ì 'MDN [ì©ì´]'ë¡ ê²ìíë©´ ëª ì¸ìë MDN문ììì ìíë ë´ì©ì ì½ê² ì°¾ì ì ììµëë¤. https://google.com?q=whatwg+localstorage, https://google.com?q=mdn+localstorage ì²ë¼ ë§ì´ì£ .
ì ì´ì UIìì íµì¬ì ì¸ ìí ì íë DOMì ëí´ ë³¸ê²©ì ì¼ë¡ ì´í´ë³´ëë¡ í©ìë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.