BOM(Browser Object Model)

JOY๐ŸŒฑยท2023๋…„ 2์›” 14์ผ
0

๐ŸŒย JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
10/12
post-thumbnail

๐Ÿ’โ€โ™€๏ธ BOM(Browser Object Model)์ด๋ž€,
๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด ๋ชจ๋ธ์„ ๋ฌธ์„œ ์ด์™ธ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €(ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ)๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๊ฐ์ฒด


๐Ÿ‘€ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ํ”Œ๋žซํผ์„ ํ˜ธ์ŠคํŠธ(host)๋ผ๊ณ  ๋ถ€๋ฆ„.

  • ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์ด ์›น ๋ธŒ๋ผ์šฐ์ €์ผ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ๊ฐœ๊ด„์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์Œ
    • window
      ใ„ด DOM
      ใ„ด BOM (location, navigator, screen, history, ...)
      ใ„ด JavaScript (Object, Array, Function, ...)

  • ์ตœ์ƒ๋‹จ์˜ window ๊ฐ์ฒด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์˜ ์ „์—ญ ๊ฐ์ฒด์ด์ž ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ๋Œ€๋ณ€ํ•˜๊ณ  ์ด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต
  • window ๊ฐ์ฒด๋Š” ์ „์—ญ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ์ƒ๋žต ๊ฐ€๋Šฅ

1) open

window.open(url, name, params) ๋ฉ”์†Œ๋“œ๋กœ ์ƒˆ ์ฐฝ์„ ์—ด ์ˆ˜ ์žˆ์Œ.

  • url : ์ƒˆ ์ฐฝ์— ๋กœ๋“œํ•  url
  • name : ์ƒˆ ์ฐฝ์˜ ์ด๋ฆ„์œผ๋กœ ํ•ด๋‹น ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ฐฝ์ด ์ด๋ฏธ ์žˆ์œผ๋ฉด ๊ทธ ์•ˆ์—์„œ ์—ด๋ฆฌ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ ์ฐฝ์ด ์—ด๋ฆผ
  • params : ์ƒˆ ์ฐฝ์˜ ์„ค์ •์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌ
<button id="btn1">์ƒˆ๋กœ์šด ์ฐฝ ์—ด๊ธฐ</button>
<button id="btn2">์ƒˆ๋กœ์šด ์ฐฝ ์—ด๊ธฐ</button>
document.getElementById('btn1').onclick = () => {
    window.open('http://www.google.com', 'popup1', 'width=1080, height=800');
};

document.getElementById('btn2').onclick = () => {
	open('http://www.naver.com', 'popup2'); // ๋”ฐ๋กœ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ์ƒˆ ์ฐฝ
}

2) alert

window.alert(message) ๋ฉ”์†Œ๋“œ๋Š” ํ™•์ธ ๋ฒ„ํŠผ์„ ๊ฐ€์ง€๋ฉฐ ๋ฉ”์„ธ์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๊ณ  ๋Œ€ํ™”์ƒ์ž๋ฅผ ๋„์›€

window.alert('์˜ค๋Š˜ ์ ์‹ฌ์€ ๋–ก๋ณถ์ด!')

3) confirm

window.confirm(message) ๋ฉ”์†Œ๋“œ๋Š” ํ™•์ธ๊ณผ ์ทจ์†Œ ๋‘ ๋ฒ„ํŠผ์„ ๊ฐ€์ง€๋ฉฐ ๋ฉ”์„ธ์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋‹ฌ ๋Œ€ํ™”์ƒ์ž๋ฅผ ๋„์›€. 'ํ™•์ธ'์„ ๋ˆ„๋ฅผ ์‹œ true, '์ทจ์†Œ'๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ESC ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด false ๋ฐ˜ํ™˜

const answer = window.confirm('๋” ๋“œ์‹œ๋ ค๋ฉด ํ™•์ธ์„ ๋ˆ„๋ฅด์„ธ์š”!')

if(answer) { // true or false๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒ์— ๋”ฐ๋ฅธ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅ ๊ฐ€๋Šฅ
        console.log('์ˆœ๋Œ€ ํ•œ ์ ‘์‹œ ์ถ”๊ฐ€!');
} else {
        console.log('ํ  ํ‰์†Œ๋‹ต์ง€์•Š๊ตฐ');
}

4) propmt

window.prompt(message, default) ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ˆ๋‚ดํ•˜๋Š” ์„ ํƒ์  ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋„์›€. default๋Š” ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ์— ๊ธฐ๋ณธ์œผ๋กœ ์ฑ„์›Œ ๋„ฃ์„ ๋ฌธ์ž์—ด.
๋ฐ˜ํ™˜ ๊ฐ’์€ ํ™•์ธ์„ ๋ˆ„๋ฅผ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด์ด๋ฉฐ ์ทจ์†Œ๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ESC ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด null์ด๋‹ค.

        const likeNumber = window.prompt('๋ช‡ ์ธ๋ถ„ ๋” ๋จน์„๊ฑฐ์—์š”?', 3); // 3์€ ์ฐฝ ์•ˆ์˜ default ๊ฐ’

        if(likeNumber) {
            console.log(`๋–ก๋ณถ์ด ${likeNumber}์ธ๋ถ„ ์ถ”๊ฐ€!`)
        } else {
            console.log('์•ˆ๋“œ์„ธ์œ ?')
        }

๐Ÿ‘€ BOM

1) location

๐Ÿ’โ€โ™€๏ธ ํ˜„์žฌ url์„ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ณ  ์ƒˆ๋กœ์šด url๋กœ ๋ณ€๊ฒฝ(redirect)ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

/* ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ */
document.getElementById('btn1').onclick = () => location.assign('http://www.google.com');
document.getElementById('btn2').onclick = () => location = 'http://www.google.com';
document.getElementById('btn3').onclick = () => location.href = 'http://www.google.com';
document.getElementById('btn4').onclick = () => location.replace('http://www.google.com'); // ์ด์ „ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐ ๋ถˆ๊ฐ€ (๋’ค๋กœ๊ฐ€๊ธฐ X)
document.getElementById('btn5').onclick = () => location.reload();
document.getElementById('btn6').onclick = () => location = location;
document.getElementById('btn7').onclick = () => location.href = location.href;

2) navigator

๐Ÿ’โ€โ™€๏ธ ๋ธŒ๋ผ์šฐ์ €์™€ ์šด์˜์ฒด์ œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณต

for(prop in navigator) {
	console.log(`${prop} : ${navigator[prop]}`); // ์ฝ˜์†”์— ์ •๋ณด ์ถœ๋ ฅ
}

3) screen

๐Ÿ’โ€โ™€๏ธ ์›น ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์ด ์•„๋‹Œ '์šด์˜์ฒด์ œ ํ™”๋ฉด'์˜ ์†์„ฑ์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด

  • screen.width, screen.height : ํ™”๋ฉด ๋„ˆ๋น„์™€ ๋†’์ด
  • screen.availwidth, screen.availHeight : ์‹ค์ œ ํ™”๋ฉด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ (์ƒํƒœ ํ‘œ์‹œ์ค„ ๋“ฑ์„ ์ œ์™ธํ•œ) ๋„ˆ๋น„์™€ ๋†’์ด
  • screen.colorDepth : ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒ‰์ƒ ์ˆ˜
  • screen.pixelDepth : ํ•œ ํ”ฝ์…€ ๋‹น ๋น„ํŠธ ์ˆ˜
for(prop in screen) {
	console.log(`${prop} : ${screen[prop]}`);
}

4) history

๐Ÿ’โ€ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ธ์…˜ ๊ธฐ๋ก, ์ฆ‰ ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ํƒญ ๋˜๋Š” ํ”„๋ ˆ์ž„์˜ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต

  • length : ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ํฌํ•จํ•ด, ์„ธ์…˜ ๊ธฐ๋ก์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๊ฐ’
  • back() : ๋’ค๋กœ ๊ฐ€๊ธฐ
  • forward() : ์•ž์œผ๋กœ ๊ฐ€๊ธฐ
  • go() : ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๊ฐ’๋งŒํผ ์ด๋™
<button id="btn1">๋’ค๋กœ ๊ฐ€๊ธฐ</button>
<button id="btn2">์•ž์œผ๋กœ ๊ฐ€๊ธฐ</button>
<input type="number" name="page">
<button id="btn3">์ž…๋ ฅํ•œ ๋งŒํผ ์ด๋™ํ•˜๊ธฐ</button>
console.log(history.length);
document.getElementById('btn1').onclick = () => history.back();     // ๋’ค๋กœ๊ฐ€๊ธฐ
document.getElementById('btn2').onclick = () => history.forward();  // ์•ž์œผ๋กœ ๊ฐ€๊ธฐ
document.getElementById('btn3').onclick = () => {
	let page = document.querySelector('input[name=page]').value;
	history.go(page); // ์ž…๋ ฅํ•œ ๋งŒํผ ์ด๋™ํ•˜๊ธฐ
};  
profile
Tiny little habits make me

0๊ฐœ์˜ ๋Œ“๊ธ€