Frontend/Javascript
브라우저 객체 모델 (Browser Object Model)
olli2
2021. 12. 10. 11:52
브라우저 객체 모델 (Browser Object Model)
- 자바스크립트에서는 웹 페이지를 구성하는 HTML 태그의 모든 요소와 웹 브라우저를 구성하는 요소들을 객체로 정의하여 제공
- 객체들을 계층 구조로 분류
브라우저 객체
- 웹 브라우저를 대상으로 이루어지 객체
- window 객체 : 창
- document 객체 : 문서
- history 객체 : 웹 브라우저 기록 정보
- location 객체 : 주소 정보
- navigator 객체 : 웹 브라우저 정보 (종류 판별 등)
브라우저 객체의 계층 구조
window 객체
- 창에 대한 전반적인 상황을 제어하는 최상위 객체
- 자바스크립트에서 사용되는 모든 객체는 window 객체의 하위에 존재
- navigator 객체를 제외한 모든 객체는 window 객체를 통해 접근하여 사용
- window 객체는 생략 가능
- window.document.pic.src = “image.jpg”;
- 문서 내에서 name 속성이 pic인 객체의 src 속성 변경
- <img name=”pic” src=’a.jpg’>
window 객체의 주요 속성
창 속성 | 속성 지정 방법 | 설명 |
toolbar | yes/no | 도구 모음 표시 여부 설정 |
location | URL 주소 표시줄 표시 여부 설정 | |
status | 상태 바 표시 여부 설정 | |
menubar | 메뉴 표시줄 표시 여부 설정 | |
scrollbars | 스크롤 바 표시 여부 설정 | |
directories | 디렉터리 바 표시 설정 | |
resizable | 창의 크기 조정 가능 여부 설정 | |
height | 픽셀 수 | 창의 세로 길이를 픽셀 단위로 설정 |
width | 창의 가로 길이를 픽셀 단위로 설정 |
window 객체의 주요 메소드
메소드 | 설명 |
open() | 새로운 창을 만들어 화면에 출력하는 기능 |
close() | 열린 창을 닫는 기능 |
setTimeout() | 일정 시간이 지난 후에 함수 한 번 호출 기능 |
clearTimeout() | setTimeout()로 설정된 내용 정지 기능 |
setInterval() | 일정 시간 간격 후에 명령 수행 기능 (함수 여러 번 호출 가능 - 애니메이션 효과에 사용) |
clearInterval() | setInterval()로 설정된 내용 정지 기능 |
open() 메소드
- window.open(“URL”, “창이름”, “창 속성”);
- URL : 웹페이지 주소나 HTML 파일명. 빈 값이면 새로운 창을 만들어서 오픈
- 창 이름 : 새로 만들어지는 창 이름 (임의로 작성)
- 창 속성 : 창의 모양이나 특징
window.open(“test.html”, “test”, “width=200, height=200, status=yes, scrollbars=yes, resizable=yes”); // 기존의 test.html 문서 열기
window.open(“”, “newWin”, “width=400, height=150”); // 새로운 창을 만들어서 열기
open() / close() 메소드 예제 : 기존의 문서 열기
<!-- bigImage.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
</script>
</head>
<body>
<center>
<img src="image/고흐.jpg"><br><br>
<button onClick="window.close()">닫기</button>
</center>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
function showBigImage() {
window.open("bigImage.html", "bigWin", "width=600, height=800, left=200, top=50");
}
</script>
</head>
<body>
<center>
그림에 마우스를 올리면 <br>
그림을 크게 볼 수 있습니다<br><br>
<img src="image/고흐.jpg" width="118" height="146" onMouseOver="showBigImage()">
</center>
</body>
</html>
open() / close() 메소드 예제 : 새로운 창 만들어서 열기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
// 새로운 창을 만들어서 열기
// 새로운 창에 문자열과 버튼 출력
// 버튼 클릭 시 창 닫는 기능 포함
function openNewWindow() {
// 작업에 사용하기 위해 변수로 만들어 줌
var createWin = window.open("", "newWin", "width=400, height=150");
createWin.document.write("새로 만든 윈도우 창입니다.<br>");
createWin.document.write("<button onClick='window.close()'>닫기</button>");
}
</script>
</head>
<body>
<button onClick="openNewWindow()">새 창 열기</button>
</body>
</html>
window 객체의 타이머 관련 함수
- setTimeout() / clearTimeout()
- setinterval() / clearInterval()
setTimeout()
- setTimeout(‘호출함수’, 지연시간)
- 시간 설정
- 일정 시간이 지난 후에 호출함수를 1번만 실행
setTimeout(‘winClose()’, 1000); // 1초 후에 winClose() 함수 호출
clearTimeout()
- clearTimeout(타이머ID)
- setTimeout()으로 시간 설정한 것을 해제
- setTimeout() 메소드가 반환하는 타이머ID를 받아, 타이머ID에 해당되는 타이머를 설정해제
timerID = setTimeout('winClose()', 1000);
clearTimeout(timerID)
setTimeout() / clearTimeout() 메소드 예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
function openInfo() {
window.open("msgWindow.html", "setTimeout", "width=300, height=200");
}
// msgWindow 창이 닫히고 부모창인 setTime.html 창이 포커스를 받을 때 호출되는 함수
function showMsg() {
document.write("로드하자마자 열린 공지사항 창이<br> 3초 후에 자동으로 닫혔습니다.");
}
</script>
</head>
<body onLoad="openInfo()" onFocus="showMsg()">
부모창입니다. (opener에 해당)
</body>
</html>
<!-- msgWindow.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
function winClose() {
window.close();
opener.focus(); // 현재 창을 연 부모 창에 포커스 줌
}
</script>
</head>
<body onLoad="setTimeout('winClose()', 3000);">
공지 사항<br>
이 창은 3초 후에 닫힙니다.
</body>
</html>
setInterval()
- 일정 시간 간격 안에 반복 실행 : 지연시간으로 설정된 시간 간격으로 반복 호출
- setInterval(‘호출함수’, 지연시간);
clearInterval()
- setInterval()로 시간 설정한 것 해제
- clearInterval(타이머ID);
setInterval() / clearInterval() 메소드 예제 - 1
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
function showTime() {
var today = new Date();
var hour = today.getHours();
var minute = today.getMinutes(); // getMonth()가 0부터 반환
var second = today.getSeconds();
var ampm = "오전";
if (hour==24) {
hour-=24;
} else if (hour >= 12) {
ampm = "오후";
if (hour>12) {
hour-=12;
}
}
var time = ampm + hour +"시" + minute +"분" + second + "초";
timeShow.innerHTML = time;
}
</script>
</head>
<body>
<button onClick="timerID = setInterval('showTime()', 1000)">시간 출력</button>
<button onClick="clearInterval(timerID)">시간 정지</button>
<h2 id="timeShow">시간 여기에 출력</h2>
</body>
</html>
setInterval() / clearInterval() 메소드 예제 - 2
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
function start() {
alert("이미지 10개 출력");
timerID = setInterval('showImage()', 1000);
}
var count = 0;
var num = 1;
var idx = 0;
function showImage() {
count++;
let img = ['<img src="image/cherry.png">', '<img src="image/bomb.png">', '<img src="image/apple.png">'];
if (count >= 10) {
clearInterval(timerID);
alert("이미지 출력 완료")
}
if (idx>=3) idx=0;
document.write(img[idx]);
idx++;
num++;
}
</script>
</head>
<body onLoad="start()">
</body>
</html>
setInterval() / clearInterval() 메소드 예제 - 3
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<style>
div {margin:0 auto; width:100%; text-align:center;}
</style>
<script type="text/javascript">
var countTime = 10;
var idx = 1;
function start() {
timerID = setInterval('bombCount()', 500);
}
function bombCount() {
countH1.innerHTML = countTime;
bombImg.src = `image/bomb${idx}.jpg`;
countTime--;
idx++;
if (idx == 12) {
clearInterval(timerID);
idx = 1;
countTime = 10;
}
}
</script>
</head>
<body>
<div>
<h1 id="countH1">10</h1>
<img id="bombImg" src="image/bomb1.jpg"><br><br>
<button id="btn" onClick="start()">카운트 다운 시작</button>
</div>
</body>
</html>
history 객체
- 최근 방문한 주소에 관한 정보를 기억하고 있는 객체
- 메소드
- back() : 이전에 열었던 페이지로 이동
- forward() : 이전 페이지로 이동 후 다시 앞으로 이동
- go() : 몇 단계 뒤에 있는 페이지로 이동
- go(3) : 3단계 앞의 페이지로 이동
- go(-2) : 2단계 다음 페이지로 이동
location 객체
- 현재 브라우저의 주소창에 표시된 주소 값에 관련된 내용을 다루는 객체
멤버 | 설명 |
href = URL | 지정된 URL로 페이지 이동 |
pathname | 도메인을 제외한 실제 파일 경로 |
assign(URL) | 지정된 URL로 페이지 이동 |
replace(URL) | 현재 페이지를 URL로 대체 history 기록 남지 않아 back 버튼 적용 안 됨 (최신 IE 됨) |
reload() | 문서 내용 새로고침 |
크롬 사용 시 location.href() 메소드 지원 안 됨
-> href 속성값 부여를 통해 사용
-> (O) -> location.href = “http://www.google.com”;
-> (X) -> window.location.href(“http://www.google.com”);
예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript </title>
<script type="text/javascript">
function hrefMove() {
location.href="http://www.google.com"; // 크롬 사용 시
// 크롬에서는 지원되지 않는 형식-> 위 코드처럼 메소드가 아닌 속성값 부여를 통해 사용 가능
// window.location.href("http://www.google.com");
}
function assignMove() {
// window 생략 가능
window.location.assign("http://www.daum.net");
}
function replaceMove() {
// window 생략 가능
// 뒤로 가기 버튼 적용 안 됨
window.location.replace("http://www.youtube.com");
}
</script>
</head>
<body>
<a href="http://www.naver.com">네이버</a><br><br>
<button onClick="hrefMove()">구글</button>
<button onClick="assignMove()">다음</button>
<button onClick="replaceMove()">유튜브</button>
</body>
</html>
navigator 객체
- 브라우저에 관한 정보 제공
속성 | 설명 |
appCodeName | 브라우저의 코드명 |
appName | 브라우저 종류 |
appVersion | 브라우저 버전 |
cookieEnabled | 쿠키 사용 가능 |
platform | 시스템 환경 |
userAgent | 브라우저 기본 정보 (종류/버전) |
systemLanguage | 시스템 언어 |