자바스크립트를 이용하면 웹 페이지를 동적으로 만들 수 있다.
기술적인 측면에서 웹 브라우저에서 자바스크립트가 하는 일:
자바스크립트 코드를 삽입하는 방법:
<script>
console.log("Hello!");
</script>
<script src="../scripts/sample.js"></script>
<input type="button" value="click" onclick="console.log("Hello!");">
<a href="javascript:console.log(`I'm pretty good!`)">
What's going on?
</a>
웹 브라우저에서 HTML문서를 분석하고 표시하는 프로그램을 가리켜 렌더링 엔진이라고 한다.
이미지등의 외부 리소스를 읽어 들이는 시점이 DOM 트리 구축이 끝난 후라는 점을 유의한다.
load 이벤트는 이미지 등의 외부 리소스를 모두 읽어 들인 후에 발생하기 때문에 외부 리소스를 읽어들이는 시간이 걸리는 만큼 사용자가 기다려야 하는 시간이 길어진다.
이를 방지하기 위해서는 load 이벤트 대신 DOMContentLoaded이벤트의 이벤트 처리기에 초기화 작업을 작성한 함수를 등록한다.
src 속성을 가진 script 요소에 적용할 수 있지만 인라인 스크립트에는 사용 불가
async와 defer를 사용하면 자바스크립트 코드를 실행할 때 HTML 구문 분석을 막지 않는다.
<script async src="../scripts/sample.js"></script>
<script defer src="../scripts/sample.js"></script>
async
script 요소에 async를 속성을 설정하면 script 요소의 코드가 비동기적으로 실행된다.
여러 개의 script 요소에 async 속성을 설정하면 다 읽어 들인 코드부터 비동기적으로 실행하므로 실행 순서가 보장되지 않는다.
읽어 들이는 순서에 의존하는 script는 async 속성을 설정하지 말아야 한다.
defer
defer 속성을 설정한 script 요소는 DOM 트리 구축이 끝난 후에 실행된다.
DOM 구축이 끝난 시점에 실행되기 때문에 자바스크립트 코드로 요소 객체에 이벤트 처리기를 등록하는 등의 초기화 작업을 할 수 있다.
defer속성은 DOMContentLoaded 이벤트의 대안으로 활용할 수 있다.
Window 객체는 전역 객체이며, 전역 변수는 Window 객체의 프로퍼티이다.
window 프로퍼티로 참조하고 싶을때는 window.프로퍼티 로 작성할 수 있다(window.은 생략 가능)
Location 객체는 창에 표시되는 문서의 URL을 관리한다.
| 프로퍼티 | 설명 | 예 |
|---|---|---|
| hash | 앵커부분 | #anchor |
| host | 호스트이름:포트번호 | www.exapmle.com:80 |
| hostname | 호스트 이름 | www.example.com |
| href | 전체 URL | http://www.example.com:80/test/index.html?g=value#anchor |
| pathname | 웹 사이트의 루트를 기준으로 한 상대 경로 | /test |
| port | 포트번호 | 80 |
| protocol | 프로토콜 | http: |
| search | 질의 문자열 | ?q=value |
| 메서드 | 설명 |
|---|---|
| assign(url) | url이 가리키는 문서를 읽는다. 웹 브라우저의 이력에 남는다. |
| reload() | 문서를 다시 읽어 들인다. |
| replace(url) | url로 이동한다. 웹브라우저의 이력에 남지 않는다. |
| toString() | location.href 값을 반환한다. |
History 객체는 창의 웹페이지 열람 이력을 관리한다.
| 프로퍼티 | 설명 |
|---|---|
| length | 현재 세션의 이력 개수(읽기 전용) |
| scrollRestoration | 웹페이지를 이동한 후에 동작하는 웹 브라우저의 자동 스크롤 기능을 켜거나 끄는 값. "auto" 또는 "manual"이 들어갈 수 있다 |
| state | pushState와 replaceState 메서드로 설정한 state값(읽기 전용) |
| 메서드 | 설명 |
|---|---|
| back() | 창의 웹 페이지 열람 이력을 하나 되돌린다 |
| forward() | 창의 웹 페이지 열람 이력을 하나 진행한다 |
| go(number) | 창의 웹 페이지 열람 이력을 number만큼 진행한다. number 값이 음수이면 그만큼 되돌린다 |
| pushState(state, title url) | 창에 웹 페이지 열람이력을 추가한다. 페이지는 이동하지 않는다 |
| repalceState(state, title url) | 현재 창의 열람 이력을 수정한다. |
Navigator 객체는 스크립트가 실행 중인 웹 브라우저 등의 애플리케이션 정보를 관리한다.
Navigator 객체는 브라우저 테스트에 활용한다.(userAgent 프로퍼티 한정)
| 프로퍼티 | 설명 |
|---|---|
| appCodeName | 웹 브라우저의 내부 코드 네임. 정확하지는 않음 |
| appName | 웹 브라우저 이름. 정확하지 않음 |
| appVersion | 웹 브라우저 버전. 정확하지 않음 |
| geolocation | 단말기의 물리적 위치를 관리하는 Geolocation 객체 |
| language | 웹 브라우저의 UI 언어("en","en-US","ko","ko-KR", "fr") |
| mimeTypes[] | 웹 브라우저가 지원하는 MIME 타입 목록을 저장한 MimeTypeArray 객체 |
| onLine | 웹 브라우저가 네트워크에 연결되어 있는지를 뜻하는 논리 값 |
| platform | 웹 브라우저의 플랫폼. 윈도는 "win32", 맥은 "MacIntel" |
| plugins | 웹 브라우저에 설치된 플러그인 목록을 가리키는 Plugin 객체의 배열 |
| userAgent | 웹 브라우저가 USER-AGENT 헤더에 보내는 문자열 |
| 메서드 | 설명 |
|---|---|
| javaEnabled() | Java를 이용할수 있는지를 뜻하는 논리값을 반환 |
| getUserMedia() | 단말기의 마이크와 카메라에서 audio와 video스트림을 반환 |
| registerContentHandler(mimeType, uri, title) | 웹 사이트를 특정 MIME타입과 연결 |
| registerContentHandler(mimeType, uri, title) | 웹 사이트를 특정 프로토콜과 연결 |
| vibrate() | 단말기를 진동시킴 |
Screen 객체는 화면(모니터) 크기와 색상 등의 정보를 관리한다.
| 프로퍼티 | 설명 |
|---|---|
| availTop | 사용할 수 있는 화면의 첫 번째 픽셀의 y좌표 |
| availLeft | 사용할 수 있는 화면의 첫 번째 픽셀의 x좌표 |
| availHeight | 사용할 수 있는 화면의 높이 |
| availWidth | 사용할 수 있는 화면의 너비 |
| colorDepth | 화면의 색상 심도(비트 수): 약 1678만 색상이면 24 |
| pixelDepth | 화면의 색상 심도(비트 수): 약 1678만 색상이면 24 |
| height | 화면 높이 |
| width | 화면 너비 |
| orientation | 화면 방향 |
사용할 수 있는 화면이란 화면에서 작업 표시줄 등을 제외한 나머지 부분
Document 객체는 창에 표시되고 있는 웹 페이지를 관리한다.
이 객체로 웹 페이지의 내용물인 DOM 트리를 읽거나 쓸 수 있습니다.
| 프로퍼티 | 설명 |
|---|---|
| characterSet | 문서에 적용된 문자 인코딩(읽기 전용) |
| cookie | 문서의 cookie를 쉼표로 연결한 문자열 |
| domain | 문서의 도메인(읽기 전용) |
| lastModified | 문서를 마지막 수정한 날(읽기 전용) |
| location | window.location프로퍼티와 마찬가지로 Location객체를 가리킴 |
| readyState | 문서를 읽어 들인 상태(읽기 전용) |
| referrer | 문서에 링크된 페이지 URL(읽기 전용) |
| title | 문서 제목 |
| URL | 문서 URL(읽기 전용) |
| 메서드 | 설명 |
|---|---|
| close() | document.open() 메서드로 연 문서를 닫는다 |
| open() | 문서를 쓰기 위해 연다 |
| write(text) | document.open() 메서드로 연 문서에 기록한다. |
| writeIn(text) | document.open() 메서드로 연 문서에 기록하고 개행 문자를 추가한다 |
var w = open(url, 창의 이름, 옵션)
| 옵션의 이름 | 설명 |
|---|---|
| width | 창 너비 |
| height | 창 높이 |
| location | 주소 표시줄 표시 여부(yes 또는 no) |
| scrollbars | 스크롤 막대 표시 여부(yes 또는 no) |
| resizable | 창 크기의 변경 가능 여부(yes 또는 no) |
| toolbar | 도구 모음 표시 여부(yes 또는 no) |
| status | 상태 표시줄 표시 여부(yes 또는 no) |
| menubar | 메뉴 막대 표시 여부(yes 또는 no) |