티스토리 뷰
기타 개발/Web
[JavaScript] 웹브라우저 Java Script (JavaScript Load, Object Model, BOM, DOM)
beankhan 2017. 6. 19. 23:25출처
https://opentutorials.org/course/1375/6620
https://opentutorials.org/course/1375/6622
http://learn.javascript.ru/browser-environment
HTML 에서 JavaScript 로드하기
Inline 으로 로드하기
inline 방식은 태그에 직접 자바스크립트 코드를 작성하는 방식이다.
장점은 태그에 연관된 스크립트가 분명하게 드러난다는 것이지만,
정보가 제어가 섞여있기 때문에 정보로써의 가치가 떨어진다.
<!DOCTYPE html>
<
html
>
<
body
>
<
input
type
=
"button"
onclick
=
"alert('Hello world')"
value
=
"Hello world"
/>
</
body
>
</
html
>
Script 로 로드하기
<script></script> 태그를 만들어서 코드를 삽입하는 방식이다.
장점은 html 태그와 JavaScript 코드를 분리할 수 있다는 점이다.
<!DOCTYPE html>
<html>
<body>
<input type=
"button"
id=
"hw"
value=
"Hello world"
/>
<script type=
"text/javascript"
>
var
hw = document.getElementById(
'hw'
);
hw.addEventListener(
'click'
,
function
(){
alert(
'Hello world'
);
})
</script>
</body>
</html>
외부 파일로 분리
별도의 파일로 분리할 수도 있다.
장점은 보다 엄격하게 정보와 제어를 분리할 수 있다.
하나의 js 파일을 여러 웹페이지에서 로드함으로서
js의 재활용성을 높일 수 있다.
캐쉬를 통해서 속도의 향상, 전송량의 경량화를 도모할 수 있다.
<html>
<!DOCTYPE html>
<html>
<body>
<input type=
"button"
id=
"hw"
value=
"Hello world"
/>
<script type=
"text/javascript"
src=
"script2.js"
></script>
</body>
</html>
<.js>
var
hw = document.getElementById(
'hw'
);
hw.addEventListener(
'click'
,
function
(){
alert(
'Hello world'
);
})
Script 한 파일의 위치
script를 head 태그에 위치시킬 수도 있다. 하지만 이 경우는 오류가 발생한다.
<!DOCTYPE html>
<
html
>
<
head
>
<
script
src
=
"script2.js"
></
script
>
</
head
>
<
body
>
<
input
type
=
"button"
id
=
"hw"
value
=
"Hello world"
/>
</
body
>
</
html
>
아래와 같이 script2.js의 코드를 수정해야 한다.
window.onload =
function
(){
var
hw = document.getElementById(
'hw'
);
hw.addEventListener(
'click'
,
function
(){
alert(
'Hello world'
);
})
}
그 이유는 <head></head> 에서 <script></script> 를 만나면
웹브라우저는 "script2.js" 파일을 다운받고 해석에 들어가는데
document.getElementById('hw') 에서 'hw' 값이 아직 해석되지 않았으므로
var hw 값은 null 이 되어 addEventListener 시 오류가 난다.
window.onload = function(){} 함수는
웹브라우저의 모든 구성요소에 대한 로드가 끝났을 때
브라우저에 의해서 호출되는 함수다.
위 오류를 방지하고 싶다면,
window.onload = function() { ... } 에서 addEvent 를 하면된다.
일반적으로 <script></script> 를 <head></head>
사이에 많이들 위치시키는데 좋지 않은 방법이다.
java script 를 해석하는 시간에
html 을 해석해서 브라우저에 먼저 렌더링 하는것이
사용자 반응성에 더 좋기 때문이다.
또한 window.onload event 를 받을 필요도 없다.
Object Model
개요
웹브라우저를 제어한다는 것은
JavaScriptCore, BOM, DOM 을 이용한다는 것이다.
웹브라우저는 HTML 파일을 해석하며
이미 <html>, <body>, <img> tag 들에 대해 객체화를 해놓는다.
객체를 제어한다는 것은 객체가 가리키고 있는 tag 를 제어한다는 것이다.
<!DOCTYPE html>
<
html
>
<
body
>
<
img
src
=
"./image.png"
/>
</
body
>
</
html
>
위 객체를 가져오기 위해서는
아래와 같이 하면된다.
var imgs = document.getElementsByTagName('img');
imgs[0] ->
<
img
src
=
"./image.png"
/>
imgs[0].style.width = '300px'
imgs[0].style.width = '50px'
이미 HTML 코드를 통해 렌더링이 끝난 이미지는 변경할 수 없는데
위와같이 JavaScript 를 이용해 동적으로 변경할 수 있다.
위 예제처럼 웹 브라우저의 구성요소들은 하나하나 모두 객체화 되어있다.
자바스크립트로 객체들을 제어해서 웹브라우저를 제어할 수 있게된다.
이 객체들은 서로 계층적인 관계로 구조화 되어있다.
DOM, BOM 은 이 구조를 구성하고 있는 가장 큰 분류이다.
Window, BOM, DOM
window 란 전역객체로 window, frame 과 같은 것을 제어할 수 있다.
정확히는 window 객체 안에 document property 가 존재한다.
하지만 window.document 와 document 는 동일한데,
그 이유는 window. 를 사용하지 않아도
기본적으로 전역객체로써 window 의 document 라는 것을
암시적으로 의미하기 때문이다.
DOM (Document Object Model)
웹페이지의 내용, 즉 웹페이지 문서 (html, body, img, ...) 을 제어한다.
document 객체가 이러한 작업을 담당한다.
이를 DOM (Document Object Model) 이라고 말한다.
Document 객체의 프로퍼티는 문서 내의
주요 엘리먼트에 접근할 수 있는 객체를 제공한다.
<!DOCTYPE html>
<
html
>
<
body
>
<
script
>
// body 객체
console.log(document.body);
// 이미지 객체들의 리스트
console.log(document.images);
</
script
>
</
body
>
</
html
>
<!DOCTYPE html>
<
html
>
<
body
>
<
script
type
=
"text/javascript"
>
// body 객체
console.log(document.getElementsByTagName('body')[0]);
// 이미지 객체들의 리스트
console.log(document.getElementsByTagName('body'));
</
script
>
</
body
>
</
html
>
BOM (Browser Object Model)
웹페이지의 내용을 제외한 브라우저의 각종 요소들을 객체화시킨 것이다.
전역객체 Window의 프로퍼티에 속한 객체들이 이에 속한다.
BOM 을 이용하면 웹브라우저가 표시하고 있는 화면을 reload 하거나
주소창의 url 을 알아온다거나 alert 를 띄워주는 일을 할 수 있다.
<!DOCTYPE html>
<
html
>
<
body
>
<
input
type
=
"button"
onclick
=
"alert(window.location)"
value
=
"alert(window.location)"
/>
<
input
type
=
"button"
onclick
=
"window.open('bom.html')"
value
=
"window.open('bom.html')"
/>
</
body
>
</
html
>
JavaScript Core
BOM, DOM 객체들을 JavaScript 언어를 이용해 제어한다.
JavaScript 언어를 사용하므로
언어 자체에 정의되어 있는 Object, Array, Dictionary 등등을 사용할 수 있다.
'기타 개발 > Web' 카테고리의 다른 글
[BOM] 브라우저를 제어하기 위한 기능 (0) | 2017.06.23 |
---|---|
HTTP 프로토콜과 REST 소개 (0) | 2017.05.22 |
[JSON] JSON 의 개요 (0) | 2017.04.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- NSManagedObjectModel
- UIView
- optional
- delegate
- set
- AWS
- ios
- Swift
- NSManagedObjectContext
- RunLoop
- Swift3
- EffectiveObjectiveC
- CIImage
- dictionary
- string
- NSManagedObject
- 꺼내먹어요
- Arc
- 읽기 좋은 코드가 좋은 코드다
- coredata
- docker
- HTTP
- Swift 3.0
- thread
- CGImage
- Swift 3
- Swfit
- workerThread
- Block
- applicationWillResignActive
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함