HTML5-퀵 가이드

HTML5는 HTML 4.01, XHTML 1.0 및 XHTML 1.1을 대체하는 HTML 표준의 다음 주요 개정판입니다. HTML5는 World Wide Web에서 콘텐츠를 구성하고 표시하기위한 표준입니다.

HTML5는 W3C (World Wide Web Consortium)와 WHATWG (Web Hypertext Application Technology Working Group) 간의 협력입니다.

새로운 표준은 이전에 Adobe Flash, Microsoft Silverlight 및 Google Gears와 같은 타사 브라우저 플러그인에 의존했던 비디오 재생 및 드래그 앤 드롭과 같은 기능을 통합합니다.

브라우저 지원

최신 버전의 Apple Safari, Google Chrome, Mozilla Firefox 및 Opera는 모두 많은 HTML5 기능을 지원하며 Internet Explorer 9.0은 일부 HTML5 기능도 지원합니다.

iPhone, iPad 및 Android 휴대폰에 사전 설치되어 제공되는 모바일 웹 브라우저는 모두 HTML5를 훌륭하게 지원합니다.

새로운 기능

HTML5는 최신 웹 사이트를 구축하는 데 도움이 될 수있는 여러 가지 새로운 요소와 속성을 도입합니다. 다음은 HTML5에 도입 된 가장 눈에 띄는 기능 중 일부입니다.

  • New Semantic Elements − <header>, <footer>, <section>과 같습니다.

  • Forms 2.0 − <input> 태그에 대한 새 속성이 도입 된 HTML 웹 양식 개선.

  • Persistent Local Storage − 타사 플러그인에 의존하지 않고 달성하기 위해.

  • WebSocket − 웹 애플리케이션을위한 차세대 양방향 통신 기술.

  • Server-Sent Events − HTML5는 웹 서버에서 웹 브라우저로 흐르는 이벤트를 소개하며이를 SSE (Server-Sent Events)라고합니다.

  • Canvas − JavaScript로 프로그래밍 할 수있는 2 차원 그리기 화면을 지원합니다.

  • Audio & Video − 타사 플러그인을 사용하지 않고 웹 페이지에 오디오 또는 비디오를 삽입 할 수 있습니다.

  • Geolocation − 이제 방문자는 웹 애플리케이션과 물리적 위치를 공유하도록 선택할 수 있습니다.

  • Microdata −이를 통해 HTML5 이상의 고유 한 어휘를 생성하고 사용자 정의 의미 체계로 웹 페이지를 확장 할 수 있습니다.

  • Drag and drop − 동일한 웹 페이지의 한 위치에서 다른 위치로 항목을 끌어다 놓습니다.

하위 호환성

HTML5는 가능한 한 기존 웹 브라우저와 역 호환되도록 설계되었습니다. 새로운 기능은 기존 기능에 구축되었으며 이전 브라우저에 대한 대체 콘텐츠를 제공 할 수 있습니다.

몇 줄의 자바 스크립트를 사용하여 개별 HTML5 기능에 대한 지원을 감지하는 것이 좋습니다.

이전 버전의 HTML에 익숙하지 않은 경우 HTML Tutorial HTML5의 기능을 살펴보기 전에

HTML 5 언어에는 웹에 게시 된 HTML 4 및 XHTML1 문서와 호환되는 "사용자 정의"HTML 구문이 있지만 HTML 4의보다 난해한 SGML 기능과는 호환되지 않습니다.

HTML 5에는 소문자 태그 이름이 필요하고 속성을 인용하고 속성에 값이 있어야하고 모든 빈 요소를 닫아야하는 XHTML과 동일한 구문 규칙이 없습니다.

HTML5는 많은 유연성을 제공하며 다음 기능을 지원합니다.

  • 대문자 태그 이름.
  • 따옴표는 속성에 대한 선택 사항입니다.
  • 속성 값은 선택 사항입니다.
  • 빈 요소를 닫는 것은 선택 사항입니다.

DOCTYPE

이전 버전의 HTML에서 DOCTYPE은 HTML 언어가 SGML 기반이므로 DTD에 대한 참조가 필요하기 때문에 더 길었습니다.

HTML 5 작성자는 다음과 같이 DOCTYPE을 지정하기 위해 간단한 구문을 사용합니다.

<!DOCTYPE html>

위의 구문은 대소 문자를 구분하지 않습니다.

문자 인코딩

HTML 5 작성자는 간단한 구문을 사용하여 다음과 같이 문자 인코딩을 지정할 수 있습니다.

<meta charset = "UTF-8">

위의 구문은 대소 문자를 구분하지 않습니다.

<script> 태그

다음과 같이 스크립트 요소에 "text / javascript"값이있는 유형 속성을 추가하는 것이 일반적입니다.

<script type = "text/javascript" src = "scriptfile.js"></script>

HTML 5는 필요한 추가 정보를 제거하고 간단히 다음 구문을 사용할 수 있습니다.

<script src = "scriptfile.js"></script>

<link> 태그

지금까지 다음과 같이 <link>를 작성했습니다.

<link rel = "stylesheet" type = "text/css" href = "stylefile.css">

HTML 5는 필요한 추가 정보를 제거하고 다음 구문을 사용하면됩니다.

<link rel = "stylesheet" href = "stylefile.css">

HTML5 요소

HTML5 요소는 시작 태그와 종료 태그를 사용하여 마크 업됩니다. 태그는 사이에 태그 이름과 함께 꺾쇠 괄호를 사용하여 구분됩니다.

시작 태그와 종료 태그의 차이점은 후자의 태그 이름 앞에 슬래시가 포함된다는 것입니다.

다음은 HTML5 요소의 예입니다.

<p>...</p>

HTML5 태그 이름은 대소 문자를 구분하지 않으며 모두 대문자 또는 대소 문자를 혼합하여 쓸 수 있지만 가장 일반적인 규칙은 소문자를 사용하는 것입니다.

대부분의 요소에는 <p> ... </ p>와 같은 일부 콘텐츠가 포함되어 있습니다. 그러나 일부 요소는 내용을 전혀 포함 할 수 없으며 이러한 요소를 void 요소라고합니다. 예를 들면br, hr, link, meta

다음은 HTML5 요소 의 전체 목록입니다 .

HTML5 속성

요소에는 요소의 다양한 속성을 설정하는 데 사용되는 속성이 포함될 수 있습니다.

일부 속성은 전역 적으로 정의되어 모든 요소에서 사용할 수있는 반면 다른 속성은 특정 요소에 대해서만 정의됩니다. 모든 속성에는 이름과 값이 있으며 아래 예제에 표시된 것처럼 보입니다.

다음은 "example"값을 사용하여 class라는 속성으로 div 요소를 마크 업하는 방법을 보여주는 HTML5 속성의 예입니다.

<div class = "example">...</div>

속성은 시작 태그 내에서만 지정 될 수 있으며 종료 태그에서는 사용되지 않아야합니다.

HTML5 속성은 대소 문자를 구분하지 않으며 모두 대문자 또는 대소 문자 혼합으로 작성 될 수 있지만 가장 일반적인 규칙은 소문자를 사용하는 것입니다.

다음은 HTML5 속성 의 전체 목록입니다 .

HTML5 문서

더 나은 구조를 위해 다음 태그가 도입되었습니다.

  • section−이 태그는 일반 문서 또는 애플리케이션 섹션을 나타냅니다. 문서 구조를 나타 내기 위해 h1-h6과 함께 사용할 수 있습니다.

  • article −이 태그는 블로그 항목이나 신문 기사와 같은 문서의 독립적 인 콘텐츠를 나타냅니다.

  • aside −이 태그는 페이지의 나머지 부분과 약간 관련된 콘텐츠를 나타냅니다.

  • header −이 태그는 섹션의 헤더를 나타냅니다.

  • footer −이 태그는 섹션의 바닥 글을 나타내며 작성자에 대한 정보, 저작권 정보 등을 포함 할 수 있습니다.

  • nav −이 태그는 탐색을위한 문서의 섹션을 나타냅니다.

  • dialog −이 태그는 대화를 마크 업하는 데 사용할 수 있습니다.

  • figure −이 태그는 그래픽 또는 비디오와 같은 일부 포함 된 콘텐츠와 함께 캡션을 연결하는 데 사용할 수 있습니다.

HTML 5 문서의 마크 업은 다음과 같습니다.

<!DOCTYPE html> 

<html>  
   <head> 
      <meta charset = "utf-8"> 
      <title>...</title> 
   </head> 
  
   <body> 
      <header>...</header> 
      <nav>...</nav> 
      
      <article> 
         <section> 
            ... 
         </section> 
      </article> 
      <aside>...</aside> 
      
      <footer>...</footer> 
   </body> 
</html>
<!DOCTYPE html>  

<html>  
   <head> 
      <meta charset = "utf-8"> 
      <title>...</title> 
   </head> 
  
   <body> 
      <header role = "banner"> 
         <h1>HTML5 Document Structure Example</h1> 
         <p>This page should be tried in safari, chrome or Mozila.</p> 
      </header> 
   
      <nav> 
         <ul> 
            <li><a href = "https://www.tutorialspoint.com/html">HTML Tutorial</a></li> 
            <li><a href = "https://www.tutorialspoint.com/css">CSS Tutorial</a></li> 
            <li><a href = "https://www.tutorialspoint.com/javascript">
            JavaScript Tutorial</a></li> 
         </ul> 
      </nav> 
   
      <article> 
         <section> 
            <p>Once article can have multiple sections</p>
         </section> 
      </article> 
   
      <aside> 
         <p>This is  aside part of the web page</p> 
      </aside> 
   
      <footer> 
         <p>Created by <a href = "https://tutorialspoint.com/">Tutorials Point</a></p> 
      </footer> 
   
   </body> 
</html>

다음 결과가 생성됩니다-

이전 장에서 설명한 것처럼 요소에는 요소의 다양한 속성을 설정하는 데 사용되는 속성이 포함될 수 있습니다.

일부 속성은 전역 적으로 정의되어 모든 요소에서 사용할 수있는 반면 다른 속성은 특정 요소에 대해서만 정의됩니다. 모든 속성에는 이름과 값이 있으며 아래 예제에 표시된 것처럼 보입니다.

다음은 "example"값을 사용하여 class라는 속성으로 div 요소를 마크 업하는 방법을 보여주는 HTML5 속성의 예입니다.

<div class = "example">...</div>

속성은 내에서만 지정할 수 있습니다. start tags 그리고 절대로 사용해서는 안됩니다 end tags.

HTML5 속성은 대소 문자를 구분하지 않으며 모두 대문자 또는 대소 문자 혼합으로 작성 될 수 있지만 가장 일반적인 규칙은 소문자를 사용하는 것입니다.

표준 속성

아래 나열된 속성은 거의 모든 HTML 5 태그에서 지원됩니다.

속성 옵션 함수
액세스 키 사용자 정의 요소에 액세스하기위한 키보드 단축키를 지정합니다.
정렬 오른쪽, 왼쪽, 가운데 태그를 가로로 정렬
배경 URL 요소 뒤에 배경 이미지 배치
bgcolor 숫자, 16 진수, RGB 값 요소 뒤에 배경색 배치
수업 사용자 정의 Cascading Style Sheets와 함께 사용할 요소를 분류합니다.
내용 편집 가능 허위 사실 사용자가 요소의 내용을 편집 할 수 있는지 여부를 지정합니다.
contextmenu 메뉴 ID 요소의 상황에 맞는 메뉴를 지정합니다.
데이터 -XXXX 사용자 정의 맞춤 속성. HTML 문서 작성자는 자신의 속성을 정의 할 수 있습니다. "data-"로 시작해야합니다.
드래그 가능 참, 거짓, 자동 사용자가 요소를 끌 수 있는지 여부를 지정합니다.
신장 숫자 값 표, 이미지 또는 표 셀의 높이를 지정합니다.
숨겨진 숨겨진 요소가 표시되어야하는지 여부를 지정합니다.
신분증 사용자 정의 캐스 케이 딩 스타일 시트와 함께 사용할 요소의 이름을 지정합니다.
안건 요소 목록 요소를 그룹화하는 데 사용됩니다.
itemprop 항목 목록 항목을 그룹화하는 데 사용됩니다.
맞춤법 검사 허위 사실 요소가 철자 또는 문법 검사를 받아야하는지 여부를 지정합니다.
스타일 CSS 스타일 시트 요소의 인라인 스타일을 지정합니다.
제목 사용자 정의 ID 요소의 해당 항목을 지정합니다.
tabindex 탭 번호 요소의 탭 순서를 지정합니다.
표제 사용자 정의 요소의 "팝업"제목입니다.
valign 상단, 중간, 하단 HTML 요소 내에서 태그를 세로로 정렬합니다.
숫자 값 표, 이미지 또는 표 셀의 너비를 지정합니다.

HTML5 태그와 관련 속성의 전체 목록을 보려면, 우리의 참조하시기 바랍니다 HTML5 태그를 .

맞춤 속성

HTML 5에 도입 된 새로운 기능은 사용자 정의 데이터 속성의 추가입니다.

사용자 정의 데이터 속성은 data-귀하의 요구 사항에 따라 이름이 지정됩니다. 다음은 간단한 예입니다.

<div class = "example" data-subject = "physics" data-level = "complex">
   ...
</div>

위의 코드는 datasubjectdata-level 이라는 두 개의 맞춤 속성이있는 완벽하게 유효한 HTML5입니다 . 표준 속성에 대해 얻은 것과 유사한 방식으로 JavaScript API 또는 CSS를 사용하여 이러한 속성의 값을 가져올 수 있습니다.

사용자가 귀하의 웹 사이트를 방문하면 텍스트와 이미지 및 링크를 클릭하고 정의 된 요소 위로 마우스를 가져가는 등 다양한 활동을 수행합니다. 다음은 JavaScript 호출의 예입니다. events.

이벤트 핸들러를 Javascript 또는 VBscript로 작성할 수 있으며 이러한 이벤트 핸들러를 이벤트 태그 속성 값으로 지정할 수 있습니다. HTML5 사양은 아래와 같이 다양한 이벤트 속성을 정의합니다.

다음 속성 세트를 사용하여 javascript 또는 vbscript HTML5 요소에 대해 발생하는 이벤트가있을 때 값으로 제공되는 코드입니다.

다음 장에서 이러한 요소에 대해 자세히 논의하면서 요소 별 이벤트를 다룰 것입니다.

속성 기술
오프라인 스크립트 문서가 오프라인이 될 때 트리거됩니다.
중단하다 스크립트 중단 이벤트에 대한 트리거
onafterprint 스크립트 문서가 인쇄 된 후 트리거됩니다.
onbeforeonload 스크립트 문서가로드되기 전에 트리거됩니다.
인쇄 전 스크립트 문서가 인쇄되기 전에 트리거됩니다.
onblur 스크립트 창이 초점을 잃을 때 트리거됩니다.
oncanplay 스크립트 미디어가 재생을 시작할 수 있지만 버퍼링을 위해 중지해야 할 때 트리거됩니다.
oncanplaythrough 스크립트 버퍼링을 위해 중지하지 않고 미디어를 끝까지 재생할 수있을 때 트리거됩니다.
onchange 스크립트 요소가 변경 될 때 트리거됩니다.
onclick 스크립트 마우스 클릭시 트리거
oncontextmenu 스크립트 상황에 맞는 메뉴가 트리거 될 때 트리거됩니다.
ondblclick 스크립트 마우스 두 번 클릭시 트리거
Ondrag 스크립트 요소를 끌 때 트리거됩니다.
Ondragend 스크립트 드래그 작업 종료시 트리거
Ondragenter 스크립트 요소를 유효한 놓기 대상으로 끌면 트리거됩니다.
ondragleave 스크립트 요소가 유효한 놓기 대상을 벗어날 때 트리거됩니다.
Ondragover 스크립트 요소를 유효한 놓기 대상 위로 끌면 트리거됩니다.
ondragstart 스크립트 드래그 작업 시작시 트리거
온 드롭 스크립트 드래그 된 요소가 드롭 될 때 트리거됩니다.
ondurationchange 스크립트 미디어 길이가 변경되면 트리거됩니다.
비어있는 스크립트 미디어 리소스 요소가 갑자기 비워지면 트리거됩니다.
계속 스크립트 미디어가 끝에 도달하면 트리거됩니다.
오류 스크립트 오류가 발생하면 트리거됩니다.
onfocus 스크립트 창이 포커스를받을 때 트리거됩니다.
onformchange 스크립트 양식이 변경 될 때 트리거됩니다.
onforminput 스크립트 양식이 사용자 입력을받을 때 트리거됩니다.
onhaschange 스크립트 문서가 변경되면 트리거됩니다.
입력 스크립트 요소가 사용자 입력을받을 때 트리거됩니다.
oninvalid 스크립트 요소가 유효하지 않을 때 트리거됩니다.
onkeydown 스크립트 키를 누를 때 트리거됩니다.
onkeypress 스크립트 키를 눌렀다 놓을 때 트리거됩니다.
onkeyup 스크립트 키를 놓을 때 트리거됩니다.
길 위에 스크립트 문서가로드 될 때 트리거됩니다.
onloadeddata 스크립트 미디어 데이터가로드 될 때 트리거됩니다.
onloadedmetadata 스크립트 미디어 요소의 기간 및 기타 미디어 데이터가로드 될 때 트리거됩니다.
onloadstart 스크립트 브라우저가 미디어 데이터를로드하기 시작할 때 트리거됩니다.
onmessage 스크립트 메시지가 트리거 될 때 트리거됩니다.
onmousedown 스크립트 마우스 버튼을 누를 때 트리거됩니다.
onmousemove 스크립트 마우스 포인터가 움직일 때 트리거됩니다.
onmouseout 스크립트 마우스 포인터가 요소 밖으로 이동할 때 트리거됩니다.
onmouseover 스크립트 마우스 포인터가 요소 위로 이동할 때 트리거됩니다.
onmouseup 스크립트 마우스 버튼을 놓을 때 트리거됩니다.
onmousewheel 스크립트 마우스 휠이 회전 할 때 트리거됩니다.
온라인 스크립트 문서가 오프라인이 될 때 트리거됩니다.
오노 인 스크립트 문서가 온라인 상태가되면 트리거됩니다.
ononline 스크립트 문서가 온라인 상태가되면 트리거됩니다.
onpagehide 스크립트 창이 숨겨지면 트리거됩니다.
onpageshow 스크립트 창이 표시 될 때 트리거됩니다.
onpause 스크립트 미디어 데이터가 일시 중지 될 때 트리거됩니다.
onplay 스크립트 미디어 데이터 재생이 시작될 때 트리거됩니다.
onplaying 스크립트 미디어 데이터 재생이 시작되면 트리거됩니다.
온팝 스테이트 스크립트 창의 기록이 변경 될 때 트리거됩니다.
진행 중 스크립트 브라우저가 미디어 데이터를 가져올 때 트리거됩니다.
onratechange 스크립트 미디어 데이터의 재생 속도가 변경되면 트리거됩니다.
onreadystatechange 스크립트 준비 상태가 변경 될 때 트리거됩니다.
Onredo 스크립트 문서가 다시 실행을 수행 할 때 트리거됩니다.
onresize 스크립트 창 크기가 조정될 때 트리거됩니다.
스크롤 스크립트 요소의 스크롤바가 스크롤 될 때 트리거됩니다.
찾다 스크립트 미디어 요소의 검색 속성이 더 이상 참이 아니고 검색이 종료 될 때 트리거됩니다.
onseeking 스크립트 미디어 요소의 검색 속성이 true이고 검색이 시작된 경우 트리거됩니다.
onselect 스크립트 요소가 선택되면 트리거됩니다.
설치 스크립트 미디어 데이터를 가져 오는 데 오류가있을 때 트리거됩니다.
onstorage 스크립트 문서가로드 될 때 트리거됩니다.
제출시 스크립트 양식이 제출 될 때 트리거됩니다.
onsuspend 스크립트 브라우저가 미디어 데이터를 가져 왔지만 전체 미디어 파일을 가져 오기 전에 중지 된 경우 트리거됩니다.
ontimeupdate 스크립트 미디어가 재생 위치를 변경할 때 트리거됩니다.
Onundo 스크립트 문서가 실행 취소를 수행 할 때 트리거됩니다.
언로드 스크립트 사용자가 문서를 떠날 때 트리거됩니다.
onvolumechange 스크립트 미디어가 볼륨을 변경할 때 트리거되며 볼륨이 "음소거"로 설정된 경우에도 트리거됩니다.
대기 중 스크립트 미디어 재생이 중지되었지만 다시 시작될 것으로 예상되는 경우 트리거됩니다.

Web Forms 2.0은 HTML4에있는 양식 기능의 확장입니다. HTML5의 양식 요소와 속성은 HTML4보다 더 높은 수준의 시맨틱 마크 업을 제공하며 HTML4에 필요한 많은 지루한 스크립팅 및 스타일링에서 해방됩니다.

HTML4의 <input> 요소

HTML4 입력 요소는 type 데이터 type.HTML4를 지정하는 속성은 다음 유형을 제공합니다-

Sr. 아니. 유형 및 설명
1

text

명목상 줄 바꿈이없는 자유 형식 텍스트 필드입니다.

2

password

명목상 줄 바꿈이없는 민감한 정보를위한 자유 형식 텍스트 필드입니다.

checkbox

미리 정의 된 목록에서 0 개 이상의 값 집합입니다.

4

radio

열거 된 값입니다.

5

submit

자유로운 형태의 버튼은 양식 제출을 시작합니다.

6

file

MIME 유형 및 선택적으로 파일 이름이있는 임의의 파일.

7

image

특정 이미지의 크기에 상대적인 좌표로, 마지막으로 선택한 값이어야하고 양식 제출을 시작해야한다는 추가 의미가 있습니다.

8

hidden

일반적으로 사용자에게 표시되지 않는 임의의 문자열입니다.

9

select

라디오 유형과 매우 유사한 열거 된 값입니다.

10

textarea

명목상 줄 바꿈 제한이없는 자유 형식 텍스트 필드입니다.

11

button

버튼과 관련된 모든 이벤트를 시작할 수있는 자유로운 형태의 버튼입니다.

다음은 레이블, 라디오 버튼 및 제출 버튼을 사용하는 간단한 예입니다.

... 
<form action = "http://example.com/cgiscript.pl" method = "post">  
   <p> 
      <label for = "firstname">first name: </label> 
      <input type = "text" id = "firstname"><br /> 
   
      <label for = "lastname">last name: </label> 
      <input type = "text" id = "lastname"><br /> 
   
      <label for = "email">email: </label> 
      <input type = "text" id = "email"><br> 
   
      <input type = "radio" name = "sex" value = "male"> Male<br> 
      <input type = "radio" name = "sex" value = "female"> Female<br> 
      <input type = "submit" value = "send"> <input type = "reset"> 
   </p> 
</form> 
 ...

HTML5의 <input> 요소

위에서 언급 한 속성 외에도 HTML5 입력 요소는 type속성. 아래에 나열되어 있습니다.

NOTE − 최신 버전을 사용하여 다음 예제를 모두 시도해보십시오. Opera 브라우저.

Sr. 아니. 유형 및 설명
1 날짜 시간

시간대가 UTC로 설정된 ISO 8601에 따라 인코딩 된 날짜 및 시간 (년, 월, 일,시, 분, 초, 초 단위)입니다.

2 datetime-local

시간대 정보없이 ISO 8601에 따라 인코딩 된 날짜 및 시간 (년, 월, 일,시, 분, 초, 초 단위)입니다.

데이트

ISO 8601에 따라 인코딩 된 날짜 (년, 월, 일)입니다.

4

ISO 8601에 따라 인코딩 된 연도와 월로 구성된 날짜입니다.

5

ISO 8601에 따라 인코딩 된 연도와 주 번호로 구성된 날짜입니다.

6 시각

ISO 8601에 따라 인코딩 된 시간 (시, 분, 초, 분수 초)입니다.

7 번호

숫자 값만 허용합니다. step 속성은 정밀도를 지정하며 기본값은 1입니다.

8 범위

범위 유형은 숫자 범위의 값을 포함해야하는 입력 필드에 사용됩니다.

9 이메일

이메일 값만 허용합니다. 이 유형은 이메일 주소를 포함해야하는 입력 필드에 사용됩니다. 간단한 텍스트를 제출하려고하면 [email protected] 형식의 이메일 주소 만 입력해야합니다.

10 URL

URL 값만 허용합니다. 이 유형은 URL 주소를 포함해야하는 입력 필드에 사용됩니다. 간단한 텍스트를 제출하려고하면 http://www.example.com 형식 또는 http://example.com 형식으로 URL 주소 만 입력해야합니다.

<output> 요소

HTML5는 스크립트로 작성된 출력과 같은 다양한 유형의 출력 결과를 나타내는 데 사용되는 새로운 요소 <output>을 도입했습니다.

당신은 사용할 수 있습니다 for계산에 영향을 준 문서에서 출력 요소와 다른 요소 간의 관계를 지정하는 속성 (예 : 입력 또는 매개 변수). for 속성의 값은 공백으로 구분 된 다른 요소의 ID 목록입니다.

<!DOCTYPE HTML>

<html>
   <head>
      <script type = "text/javascript">
         
         function showResult() {
            x = document.forms["myform"]["newinput"].value;
            document.forms["myform"]["result"].value = x;
         }
      </script>
   </head>
   
   <body>

      <form action = "/cgi-bin/html5.cgi" method = "get" name = "myform">
         Enter a value : <input type = "text" name = "newinput" />
         <input type = "button" value = "Result"  onclick = "showResult();" />
         <output name = "result"></output>
      </form>
		
   </body>
</html>

다음 결과가 생성됩니다-

자리 표시 자 속성

HTML5는 placeholder. <input> 및 <textarea> 요소에 대한이 속성은 필드에 입력 할 수있는 내용에 대한 힌트를 사용자에게 제공합니다. 자리 표시 자 텍스트에는 캐리지 리턴 또는 줄 바꿈이 포함되지 않아야합니다.

다음은 자리 표시 자 속성에 대한 간단한 구문입니다.

<input type = "text" name = "search" placeholder = "search the web"/>

이 속성은 최신 버전의 Mozilla, Safari 및 Crome 브라우저에서만 지원됩니다.

<!DOCTYPE HTML>

<html>
   <body>

      <form action = "/cgi-bin/html5.cgi" method = "get">
         Enter email : <input type = "email" name = "newinput" 
            placeholder = "[email protected]"/>
         <input type = "submit" value = "submit" />
      </form>

   </body>
</html>

이것은 다음 결과를 생성합니다-

자동 초점 속성

이것은 문서를로드 할 때 JavaScript로 쉽게 프로그래밍 할 수있는 간단한 원스텝 패턴으로 특정 양식 필드 하나에 자동으로 초점을 맞 춥니 다.

HTML5는 autofocus 다음과 같이 사용됩니다-

<input type = "text" name = "search" autofocus/>

이 속성은 최신 버전의 Mozilla, Safari 및 Chrome 브라우저에서만 지원됩니다.

<!DOCTYPE HTML>

<html>
   <body>
   
      <form action = "/cgi-bin/html5.cgi" method = "get">
         Enter email : <input type = "text" name = "newinput" autofocus/>
         <p>Try to submit using Submit button</p>
         <input type = "submit" value = "submit" />
      </form>
      
   </body>
</html>

필수 속성

이제 HTML5에서 다음과 같은 새 속성을 도입했기 때문에 빈 텍스트 상자와 같은 클라이언트 측 유효성 검사를 위해 JavaScript를 사용할 필요가 없습니다. required 다음과 같이 사용되며 가치가 있다고 주장합니다.

<input type = "text" name = "search" required/>

이 속성은 최신 버전의 Mozilla, Safari 및 Chrome 브라우저에서만 지원됩니다.

<!DOCTYPE HTML>

<html>
   <body>
   
      <form action = "/cgi-bin/html5.cgi" method = "get">
         Enter email : <input type = "text" name = "newinput" required/>
         <p>Try to submit using Submit button</p>
         <input type = "submit" value = "submit" />
      </form>
      
   </body>
</html>

다음 결과가 생성됩니다-

SVG는 Scalable V엑터 Graphics는 XML로 2D 그래픽 및 그래픽 응용 프로그램을 설명하는 언어이며 XML은 SVG 뷰어에 의해 렌더링됩니다.

SVG는 원형 차트, X, Y 좌표계의 2 차원 그래프 등과 같은 벡터 유형 다이어그램에 주로 유용합니다.

SVG 2003 년 14 1월 W3C의 권고안이되었고, 당신은에서 SVG 사양의 최신 버전을 확인할 수 있습니다 SVG 사양 .

SVG 파일보기

대부분의 웹 브라우저는 PNG, GIF 및 JPG를 표시 할 수있는 것처럼 SVG를 표시 할 수 있습니다. Internet Explorer 사용자는 브라우저에서 SVG를 보려면 Adobe SVG Viewer 를 설치해야 할 수 있습니다.

HTML5에 SVG 포함

HTML5를 사용하면 다음을 사용하여 SVG를 직접 삽입 할 수 있습니다. <svg>...</svg> 다음과 같은 간단한 구문이있는 태그-

<svg xmlns = "http://www.w3.org/2000/svg">
   ...    
</svg>

Firefox 3.7은 또한 다음 단계를 사용하여 HTML5를 활성화 할 수있는 구성 옵션 ( "about : config")을 도입했습니다.

  • 유형 about:config Firefox 주소 표시 줄에서.

  • "조심 할게요 약속 해요!" 표시되는 경고 메시지에서 버튼을 클릭하십시오 (그리고이를 준수하는지 확인하십시오!).

  • 유형 html5.enable 페이지 상단의 필터 표시 줄에

  • 현재는 비활성화되어 있으므로 클릭하여 값을 true로 전환합니다.

이제 Firefox HTML5 파서를 활성화하고 다음 예제를 실험 할 수 있습니다.

HTML5-SVG 서클

다음은 <circle> 태그를 사용하여 원을 그리는 SVG 예제의 HTML5 버전입니다.

<!DOCTYPE html>

<html>
   <head>
   
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-20%);
            -ms-transform: translateX(-20%);
            transform: translateX(-20%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
   
   <body>
      <h2 align = "center">HTML5 SVG Circle</h2>
		
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <circle id = "redcircle" cx = "50" cy = "50" r = "50" fill = "red" />
      </svg>
   </body>
</html>

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5-SVG 직사각형

다음은 <rect> 태그를 사용하여 직사각형을 그리는 SVG 예제의 HTML5 버전입니다.

<!DOCTYPE html>

<html>
   <head>
   
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-50%);
            -ms-transform: translateX(-50%);
            transform: translateX(-50%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
   
   <body>
      <h2 align = "center">HTML5 SVG Rectangle</h2>
      
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <rect id = "redrect" width = "300" height = "100" fill = "red" />
      </svg>
   </body>
</html>

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5-SVG 라인

다음은 <line> 태그를 사용하여 선을 그리는 SVG 예제의 HTML5 버전입니다.

<!DOCTYPE html>

<html>
   <head>
      
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-50%);
            -ms-transform: translateX(-50%);
            transform: translateX(-50%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
   
   <body>
      <h2 align = "center">HTML5 SVG Line</h2>
      
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <line x1 = "0" y1 = "0" x2 = "200" y2 = "100" 
            style = "stroke:red;stroke-width:2"/>
      </svg>
   </body>
</html>

당신은 사용할 수 있습니다 style 획 및 채우기 색상, 획 너비 등과 같은 추가 스타일 정보를 설정할 수있는 속성입니다.

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5-SVG 타원

다음은 <ellipse> 태그를 사용하여 타원을 그리는 SVG 예제의 HTML5 버전입니다.

<!DOCTYPE html>

<html>
   <head>
      
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-40%);
            -ms-transform: translateX(-40%);
            transform: translateX(-40%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
	
   <body>
      <h2 align = "center">HTML5 SVG Ellipse</h2>
      
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <ellipse cx = "100" cy = "50" rx = "100" ry = "50" fill = "red" />
      </svg>
		
   </body>
</html>

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5-SVG 다각형

다음은 <polygon> 태그를 사용하여 다각형을 그리는 SVG 예제의 HTML5 버전입니다.

<!DOCTYPE html>

<html>
   <head>
   
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-50%);
            -ms-transform: translateX(-50%);
            transform: translateX(-50%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
	
   <body>
      <h2 align = "center">HTML5 SVG Polygon</h2>
      
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <polygon  points = "20,10 300,20, 170,50" fill = "red" />
      </svg>
   </body>
</html>

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5-SVG 폴리 라인

다음은 <polyline> 태그를 사용하여 폴리 라인을 그리는 SVG 예제의 HTML5 버전입니다.

<!DOCTYPE html>

<html>
   <head>
      
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-20%);
            -ms-transform: translateX(-20%);
            transform: translateX(-20%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
	
   <body>
      <h2 align = "center">HTML5 SVG Polyline</h2>
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <polyline points = "0,0 0,20 20,20 20,40 40,40 40,60" fill = "red" />
      </svg>
   </body>
</html>

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5-SVG 그라디언트

다음은 <ellipse> 태그를 사용하여 타원을 그리고 SVG 방사형 그래디언트를 정의하기 위해 <radialGradient> 태그를 사용하는 SVG 예제의 HTML5 버전입니다.

마찬가지로 <linearGradient> 태그를 사용하여 SVG 선형 그래디언트를 만들 수 있습니다.

<!DOCTYPE html>

<html>
   <head>
      
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-40%);
            -ms-transform: translateX(-40%);
            transform: translateX(-40%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
	
   <body>
      <h2 align = "center">HTML5 SVG Gradient Ellipse</h2>
      
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <defs>
            <radialGradient id="gradient" cx = "50%" cy = "50%" r = "50%" fx = "50%" 
               fy = "50%">
               <stop offset = "0%" style = "stop-color:rgb(200,200,200); stop-opacity:0"/>
               <stop offset = "100%" style = "stop-color:rgb(0,0,255); stop-opacity:1"/>
            </radialGradient>
         </defs>
         <ellipse cx = "100" cy = "50" rx = "100" ry = "50" 
            style = "fill:url(#gradient)" />
      </svg>
		
   </body>
</html>

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5-SVG 별

다음은 <polygon> 태그를 사용하여 별을 그리는 SVG 예제의 HTML5 버전입니다.

<html>
   <head>
   
      <style>
         #svgelem {
            position: relative;
            left: 50%;
            -webkit-transform: translateX(-40%);
            -ms-transform: translateX(-40%);
            transform: translateX(-40%);
         }
      </style>
      <title>SVG</title>
      <meta charset = "utf-8" />
   </head>
   
   <body>	
      <h2 align = "center">HTML5 SVG Star</h2>
      
      <svg id = "svgelem" height = "200" xmlns = "http://www.w3.org/2000/svg">
         <polygon points = "100,10 40,180 190,60 10,60 160,180" fill = "red"/>
      </svg>
    </body>
</html>

이렇게하면 Firefox의 HTML5 사용 최신 버전에서 다음과 같은 결과가 생성됩니다.

HTML5의 HTML 구문을 사용하면 <math> ... </ math> 태그를 사용하여 MathML 요소를 문서 내에서 사용할 수 있습니다.

대부분의 웹 브라우저는 MathML 태그를 표시 할 수 있습니다. 브라우저가 MathML을 지원하지 않는 경우 최신 버전의 Firefox를 사용하는 것이 좋습니다.

MathML 예

다음은 MathML과 함께 유효한 HTML5 문서입니다-

<!doctype html>

<html>
   <head>
      <meta charset = "UTF-8">
      <title>Pythagorean theorem</title>
   </head>
	
   <body>
      <math xmlns = "http://www.w3.org/1998/Math/MathML">
		
         <mrow>
            <msup><mi>a</mi><mn>2</mn></msup>
            <mo>+</mo>
				
            <msup><mi>b</mi><mn>2</mn></msup>
            <mo> = </mo>
				
            <msup><mi>c</mi><mn>2</mn></msup>
         </mrow>
			
      </math>
   </body>
</html>

이것은 다음 결과를 생성합니다-

MathML 문자 사용

다음은 & InvisibleTimes; 문자를 사용하는 마크 업입니다. −

<!doctype html>

<html>
   <head>
      <meta charset = "UTF-8">
      <title>MathML Examples</title>
   </head>
	
   <body>
      <math xmlns = "http://www.w3.org/1998/Math/MathML">
		
         <mrow>			
            <mrow>
				
               <msup>
                  <mi>x</mi>
                  <mn>2</mn>
               </msup>
					
               <mo>+</mo>
					
               <mrow>
                  <mn>4</mn>
                  <mo>⁢</mo>
                  <mi>x</mi>
               </mrow>
					
               <mo>+</mo>
               <mn>4</mn>
					
            </mrow>
				
            <mo>=</mo>
            <mn>0</mn>
				 
         </mrow>
      </math>
   </body>
</html>

그러면 다음과 같은 결과가 생성됩니다. x 2 + 4x + 4 = 0 과 같은 적절한 결과를 볼 수 없다면 Firefox 3.5 이상 버전을 사용하십시오.

이것은 다음 결과를 생성합니다-

매트릭스 프레젠테이션 예

간단한 2x2 행렬을 나타내는 데 사용되는 다음 예제를 고려하십시오.

<!doctype html>

<html>
   <head>
      <meta charset = "UTF-8">
      <title>MathML Examples</title>
   </head>
	
   <body>
      <math xmlns = "http://www.w3.org/1998/Math/MathML">
		
         <mrow>
            <mi>A</mi>
            <mo>=</mo>
			
            <mfenced open = "[" close="]">
			
               <mtable>
                  <mtr>
                     <mtd><mi>x</mi></mtd>
                     <mtd><mi>y</mi></mtd>
                  </mtr>
					
                  <mtr>
                     <mtd><mi>z</mi></mtd>
                     <mtd><mi>w</mi></mtd>
                  </mtr>
               </mtable>
               
            </mfenced>
         </mrow>
      </math>

   </body>
</html>

이것은 다음 결과를 생성합니다-

그러면 다음과 같은 결과가 생성됩니다. 적절한 결과를 볼 수 없다면 Firefox 3.5 이상 버전을 사용하십시오.

HTML5는 HTTP 세션 쿠키와 유사한 두 가지 메커니즘을 도입하여 클라이언트 측에 구조화 된 데이터를 저장하고 다음과 같은 단점을 극복합니다.

  • 모든 HTTP 요청에 쿠키가 포함되어 동일한 데이터를 전송하여 웹 애플리케이션 속도를 늦 춥니 다.

  • 쿠키는 모든 HTTP 요청에 포함되어 인터넷을 통해 암호화되지 않은 데이터를 전송합니다.

  • 쿠키는 약 4KB의 데이터로 제한됩니다. 필요한 데이터를 저장하기에 충분하지 않습니다.

두 저장소는 session storagelocal storage 다양한 상황을 처리하는 데 사용됩니다.

거의 모든 브라우저의 최신 버전은 Internet Explorer를 포함한 HTML5 저장소를 지원합니다.

세션 저장

세션 스토리지는 사용자가 단일 트랜잭션 실시되는 시나리오에 대한 설계, 그러나 동시에 다른 창에서 여러 트랜잭션을 수행 할 수있다.

예를 들어 사용자가 동일한 사이트를 사용하여 두 개의 다른 창에서 비행기 표를 구매하는 경우입니다. 사이트가 쿠키를 사용하여 사용자가 구매 한 티켓을 추적 한 경우 사용자가 두 창에서 페이지를 클릭 할 때 현재 구매중인 티켓이 한 창에서 다른 창으로 "누출"되어 잠재적으로 사용자가 실제로 눈치 채지 않고 동일한 항공편에 대해 두 장의 티켓을 구입하십시오.

HTML5 는 세션 저장소에 데이터를 추가하기 위해 사이트에서 사용 하는 sessionStorage 속성을 도입했으며 , 해당 창에서 열린 동일한 사이트의 모든 페이지에 액세스 할 수 있습니다.session 창을 닫 자마자 세션이 손실됩니다.

다음은 세션 변수를 설정하고 해당 변수에 액세스하는 코드입니다.

<!DOCTYPE HTML>

<html>
   <body>
      <script type = "text/javascript">
         
         if( sessionStorage.hits ) {
            sessionStorage.hits = Number(sessionStorage.hits) +1;
         } else {
            sessionStorage.hits = 1;
         }
         document.write("Total Hits :" + sessionStorage.hits );
      </script>
	
      <p>Refresh the page to increase number of hits.</p>
      <p>Close the window and open it again and check the result.</p>

   </body>
</html>

이것은 다음 결과를 생성합니다-

로컬 스토리지

로컬 저장소는 그 스팬 여러 개의 창을 저장을 위해 설계되었으며, 현재 세션을 넘어 지속된다. 특히 웹 응용 프로그램은 성능상의 이유로 전체 사용자 작성 문서 또는 사용자의 사서함과 같은 메가 바이트의 사용자 데이터를 클라이언트 측에 저장하려고 할 수 있습니다.

다시 말하지만, 쿠키는 모든 요청과 함께 전송되기 때문에이 경우를 잘 처리하지 못합니다.

HTML5는 시간 제한없이 페이지의 로컬 스토리지 영역에 액세스하는 데 사용되는 localStorage 속성을 도입 했으며이 로컬 스토리지는 해당 페이지를 사용할 때마다 사용할 수 있습니다.

다음은 로컬 저장 변수를 설정하고이 페이지에 액세스 할 때마다 해당 변수에 액세스하는 코드입니다. 다음에 창을 열 때도 마찬가지입니다.

<!DOCTYPE HTML>

<html>
   <body>
      <script type = "text/javascript">
         
         if( localStorage.hits ) {
            localStorage.hits = Number(localStorage.hits) +1;
         } else {
            localStorage.hits = 1;
         }
         document.write("Total Hits :" + localStorage.hits );
      </script>
		
      <p>Refresh the page to increase number of hits.</p>
      <p>Close the window and open it again and check the result.</p>

   </body>
</html>

이것은 다음 결과를 생성합니다-

웹 저장소 삭제

민감한 데이터를 로컬 시스템에 저장하는 것은 위험 할 수 있으며 보안 허점을 남길 수 있습니다.

세션 저장 데이터는 세션이 종료됩니다 직후 브라우저에 의해 삭제 될 것입니다.

로컬 저장소 설정을 지우려면 다음을 호출해야합니다. localStorage.remove('key'); 여기서 'key'는 제거하려는 값의 키입니다. 모든 설정을 지우려면 전화를해야합니다.localStorage.clear() 방법.

다음은 완전한 로컬 저장소를 지우는 코드입니다.

<!DOCTYPE HTML>

<html>
   <body>

      <script type = "text/javascript">
         localStorage.clear();

         // Reset number of hits.
         if( localStorage.hits ) {
            localStorage.hits = Number(localStorage.hits) +1;
         } else {
            localStorage.hits = 1;
         }
         document.write("Total Hits :" + localStorage.hits );
			
      </script>
		
      <p>Refreshing the page would not to increase hit counter.</p>
      <p>Close the window and open it again and check the result.</p>

   </body>
</html>

이것은 다음 결과를 생성합니다-

웹 SQL 데이터베이스 API는 실제로 HTML5 사양의 일부가 아니지만 SQL을 사용하여 클라이언트 측 데이터베이스를 조작하기위한 API 집합을 도입하는 별도의 사양입니다.

나는 당신이 훌륭한 웹 개발자라고 가정하고 그것이 사실이라면 의심의 여지없이 SQL 및 RDBMS 개념을 잘 알고있을 것입니다. 여전히 SQL 세션을 원하면 SQL Tutorial을 참조하십시오 .

웹 SQL 데이터베이스는 최신 버전의 Safari, Chrome 및 Opera에서 작동합니다.

핵심 방법

이 튜토리얼에서 다룰 스펙에 정의 된 세 가지 핵심 방법이 있습니다.

  • openDatabase −이 방법은 기존 데이터베이스를 사용하거나 새 데이터베이스를 생성하여 데이터베이스 개체를 생성합니다.

  • transaction −이 방법은 트랜잭션을 제어하고 상황에 따라 커밋 또는 롤백을 수행 할 수있는 기능을 제공합니다.

  • executeSql −이 방법은 실제 SQL 쿼리를 실행하는 데 사용됩니다.

데이터베이스 열기

를 OpenDatabase의 방법은 존재하지 않는 경우는 이미이 방법을 만듭니다 존재하는 경우 데이터베이스를 여는 처리합니다.

데이터베이스를 생성하고 열려면 다음 코드를 사용하십시오.

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);

위의 방법은 다음과 같은 5 개의 매개 변수를 취했습니다.

  • 데이터베이스 이름
  • 버전 번호
  • 텍스트 설명
  • 데이터베이스 크기
  • 생성 콜백

마지막 및 다섯 번째 인수 인 생성 콜백은 데이터베이스가 생성되는 경우 호출됩니다. 그러나이 기능이 없어도 데이터베이스는 여전히 즉석에서 생성되고 올바르게 버전이 지정됩니다.

쿼리 실행

쿼리를 실행하려면 database.transaction () 함수를 사용합니다. 이 함수에는 다음과 같이 실제로 쿼리를 실행하는 함수 인 단일 인수가 필요합니다.

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); 

db.transaction(function (tx) {   
   tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); 
});

위 쿼리는 'mydb'데이터베이스에 LOGS라는 테이블을 생성합니다.

INSERT 작업

테이블에 Enteries를 생성하기 위해 위의 예에서 다음과 같이 간단한 SQL 쿼리를 추가합니다.

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); 

db.transaction(function (tx) { 
   tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); 
   tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'); 
   tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); 
});

다음과 같이 입력하는 동안 동적 값을 전달할 수 있습니다.

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);  

db.transaction(function (tx) {   
   tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); 
   tx.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?'), [e_id, e_log]; 
});

여기 e_ide_log 외부 변수이고 executeSql은 배열 인수의 각 항목을 "?"에 매핑합니다.

읽기 작업

이미 존재하는 레코드를 읽기 위해 콜백을 사용하여 다음과 같이 결과를 캡처합니다.

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);  

db.transaction(function (tx) { 
   tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
   tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'); 
   tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); 
});  

db.transaction(function (tx) { 
   tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 
      var len = results.rows.length, i; 
      msg = "<p>Found rows: " + len + "</p>"; 
      document.querySelector('#status').innerHTML +=  msg; 
  
      for (i = 0; i < len; i++) { 
         alert(results.rows.item(i).log ); 
      } 
  
   }, null); 
});

최종 예

마지막으로이 예제를 다음과 같이 본격적인 HTML5 문서에 보관하고 Safari 브라우저에서 실행 해 봅니다.

<!DOCTYPE HTML> 

<html>  
   <head> 
  
      <script type = "text/javascript"> 
         var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); 
         var msg; 
    
         db.transaction(function (tx) { 
            tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); 
            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'); 
            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); 
            msg = '<p>Log message created and row inserted.</p>'; 
            document.querySelector('#status').innerHTML =  msg; 
         })

         db.transaction(function (tx) { 
            tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 
               var len = results.rows.length, i; 
               msg = "<p>Found rows: " + len + "</p>"; 
               document.querySelector('#status').innerHTML +=  msg; 
      
               for (i = 0; i < len; i++) { 
                  msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; 
                  document.querySelector('#status').innerHTML +=  msg; 
               } 
            }, null); 
         }); 
      </script> 
   </head> 
  
   <body> 
      <div id = "status" name = "status">Status Message</div> 
   </body> 
</html>

이것은 다음 결과를 생성합니다-

기존 웹 응용 프로그램은 웹 서버로 전달되는 이벤트를 생성합니다. 예를 들어 링크를 클릭하면 서버에서 새 페이지를 요청합니다.

웹 브라우저에서 웹 서버로 흐르는 이벤트 유형을 클라이언트 전송 이벤트라고 할 수 있습니다.

HTML5와 함께 WHATWG Web Applications 1.0은 웹 서버에서 웹 브라우저로 이동하는 이벤트를 도입하며이를 SSE (Server-Sent Events)라고합니다. SSE를 사용하면 웹 서버에서 방문자의 브라우저로 DOM 이벤트를 지속적으로 푸시 할 수 있습니다.

이벤트 스트리밍 접근 방식은 서버에 대한 지속적인 연결을 열어 새로운 정보가 사용 가능할 때 데이터를 클라이언트로 전송하므로 지속적인 폴링이 필요하지 않습니다.

서버 전송 이벤트는 서버에서 클라이언트로 데이터를 스트리밍하는 방법을 표준화합니다.

SSE 용 웹 애플리케이션

웹 애플리케이션에서 Server-Sent Events를 사용하려면 문서에 <eventsource> 요소를 추가해야합니다.

그만큼 src <eventsource> 요소의 속성은 이벤트를 포함하는 데이터 스트림을 보내는 지속적인 HTTP 연결을 제공해야하는 URL을 가리켜 야합니다.

URL은 이벤트 데이터를 지속적으로 전송하는 PHP, PERL 또는 Python 스크립트를 가리 킵니다. 다음은 서버 시간을 예상하는 웹 애플리케이션의 간단한 예입니다.

<!DOCTYPE HTML>

<html>
   <head>
   
      <script type = "text/javascript">
         /* Define event handling logic here */
      </script>
   </head>
   
   <body>
      <div id = "sse">
         <eventsource src = "/cgi-bin/ticker.cgi" />
      </div>
		
      <div id = "ticker">
         <TIME>
      </div>
   </body>
</html>

SSE 용 서버 측 스크립트

서버 측 스크립트는 Content-type다음과 같이 text / event-stream 유형을 지정하는 헤더 .

print "Content-Type: text/event-stream\n\n";

Content-Type을 설정 한 후 서버 측 스크립트는 Event: 태그 뒤에 이벤트 이름이 표시됩니다. 다음 예제는 새 줄 문자로 끝나는 이벤트 이름으로 Server-Time을 보냅니다.

print "Event: server-time\n";

마지막 단계는 다음을 사용하여 이벤트 데이터를 보내는 것입니다. Data: 다음과 같이 개행 문자로 끝나는 문자열 값의 정수가 뒤에 오는 태그-

$time = localtime();
print "Data: $time\n";

마지막으로 다음은 Perl로 작성된 완전한 ticker.cgi입니다.

#!/usr/bin/perl  
print "Content-Type: text/event-stream\n\n";  

while(true) { 
   print "Event: server-time\n"; 
   $time = localtime(); 
   print "Data: $time\n"; 
   sleep(5); 
}

서버에서 보낸 이벤트 처리

서버에서 보낸 이벤트를 처리하도록 웹 애플리케이션을 수정하겠습니다. 다음은 마지막 예입니다.

<!DOCTYPE HTML> 

<html>  
   <head> 
  
      <script type = "text/javascript"> 
         document.getElementsByTagName("eventsource")[0].addEventListener("server-time", 
         eventHandler, false); 
    
         function eventHandler(event) { 

            // Alert time sent by the server 
            document.querySelector('#ticker').innerHTML = event.data; 
         } 
      </script> 
   </head> 
  
   <body> 
      <div id = "sse"> 
         <eventsource src = "/cgi-bin/ticker.cgi" /> 
      </div> 
   
      <div id = "ticker" name = "ticker"> 
         [TIME] 
      </div> 
   </body> 
</html>

Server-Sent 이벤트를 테스트하기 전에 웹 브라우저가이 개념을 지원하는지 확인하는 것이 좋습니다.

WebSockets는 단일 소켓에서 작동하고 HTML 5 호환 브라우저에서 JavaScript 인터페이스를 통해 노출되는 웹 애플리케이션을위한 차세대 양방향 통신 기술입니다.

웹 서버와 웹 소켓 연결이 이루어지면 브라우저에서 서버로 데이터를 보낼 수 있습니다. send() 방법으로 서버에서 브라우저로 데이터를 수신합니다. onmessage 이벤트 핸들러.

다음은 새로운 WebSocket 객체를 생성하는 API입니다.

var Socket = new WebSocket(url, [protocal] );

여기서 첫 번째 인수 인 url은 연결할 URL을 지정합니다. 두 번째 속성 인 protocol은 선택 사항이며 존재하는 경우 연결이 성공하기 위해 서버가 지원해야하는 하위 프로토콜을 지정합니다.

WebSocket 속성

다음은 WebSocket 객체의 속성입니다. 위에서 언급 한대로 Socket 객체를 만들었다 고 가정합니다.

Sr. 아니. 속성 및 설명
1

Socket.readyState

readonly 속성 readyState는 연결 상태를 나타냅니다. 다음 값을 가질 수 있습니다-

  • 값 0은 연결이 아직 설정되지 않았 음을 나타냅니다.

  • 값 1은 연결이 설정되고 통신이 가능함을 나타냅니다.

  • 값 2는 연결이 종료 핸드 셰이크를 거치고 있음을 나타냅니다.

  • 값 3은 연결이 닫혔거나 열 수 없음을 나타냅니다.

2

Socket.bufferedAmount

readonly 속성 bufferedAmount는 send () 메소드를 사용하여 큐에 넣은 UTF-8 텍스트의 바이트 수를 나타냅니다.

WebSocket 이벤트

다음은 WebSocket 객체와 관련된 이벤트입니다. 위에서 언급 한대로 Socket 객체를 만들었다 고 가정합니다.

행사 이벤트 핸들러 기술
열다 Socket.onopen 이 이벤트는 소켓 연결이 설정되었을 때 발생합니다.
메시지 Socket.onmessage 이 이벤트는 클라이언트가 서버에서 데이터를받을 때 발생합니다.
오류 Socket.onerror 이 이벤트는 통신에 오류가있을 때 발생합니다.
닫기 Socket.onclose 이 이벤트는 연결이 닫힐 때 발생합니다.

WebSocket 메서드

다음은 WebSocket 객체와 관련된 메서드입니다. 위에서 언급 한대로 Socket 객체를 만들었다 고 가정합니다.

Sr. 아니. 방법 및 설명
1

Socket.send()

send (data) 메서드는 연결을 사용하여 데이터를 전송합니다.

2

Socket.close()

close () 메서드는 기존 연결을 종료하는 데 사용됩니다.

WebSocket 예

WebSocket은 클라이언트와 서버 사이의 표준 양방향 TCP 소켓입니다. 소켓은 HTTP 연결로 시작한 다음 HTTP 핸드 셰이크 후에 TCP 소켓으로 "업그레이드"합니다. 핸드 셰이크 후 양쪽 모두 데이터를 보낼 수 있습니다.

클라이언트 측 HTML 및 JavaScript 코드

이 튜토리얼을 작성하는 현재 WebSocket () 인터페이스를 지원하는 웹 브라우저는 거의 없습니다. 최신 버전의 Chrome, Mozilla, Opera 및 Safari에서 다음 예제를 시도해 볼 수 있습니다.

<!DOCTYPE HTML>

<html>
   <head>
      
      <script type = "text/javascript">
         function WebSocketTest() {
            
            if ("WebSocket" in window) {
               alert("WebSocket is supported by your Browser!");
               
               // Let us open a web socket
               var ws = new WebSocket("ws://localhost:9998/echo");
				
               ws.onopen = function() {
                  
                  // Web Socket is connected, send data using send()
                  ws.send("Message to send");
                  alert("Message is sent...");
               };
				
               ws.onmessage = function (evt) { 
                  var received_msg = evt.data;
                  alert("Message is received...");
               };
				
               ws.onclose = function() { 
                  
                  // websocket is closed.
                  alert("Connection is closed..."); 
               };
            } else {
              
               // The browser doesn't support WebSocket
               alert("WebSocket NOT supported by your Browser!");
            }
         }
      </script>
		
   </head>
   
   <body>
      <div id = "sse">
         <a href = "javascript:WebSocketTest()">Run WebSocket</a>
      </div>
      
   </body>
</html>

pywebsocket 설치

위의 클라이언트 프로그램을 테스트하기 전에 WebSocket을 지원하는 서버가 필요합니다. Apache HTTP Server 용 웹 소켓 확장을 제공하는 것을 목표로하는 pywebsocket 에서 mod_pywebsocket-xxxtar.gz를 다운로드 하고 다음 단계에 따라 설치하십시오.

  • 다운로드 한 파일의 압축을 풀고 압축을 풉니 다.

  • 안으로 들어가 pywebsocket-x.x.x/src/ 예배 규칙서.

  • $ python setup.py 빌드

  • $ sudo python setup.py 설치

  • 그런 다음 문서 읽기-

    • $ pydoc mod_pywebsocket

그러면 파이썬 환경에 설치됩니다.

서버 시작

다음으로 이동 pywebsocket-x.x.x/src/mod_pywebsocket 폴더를 열고 다음 명령을 실행하십시오-

$sudo python standalone.py -p 9998 -w ../example/

그러면 9998 포트에서 수신 대기하는 서버가 시작되고 handlers echo_wsh.py가있는 -w 옵션으로 지정된 디렉토리.

이제 Chrome 브라우저를 사용하여 처음에 만든 html 파일을 엽니 다. 브라우저가 WebSocket ()을 지원하는 경우 브라우저가 WebSocket을 지원한다는 경고가 표시되고 마지막으로 "WebSocket 실행"을 클릭하면 서버 스크립트에서 보내는 Goodbye 메시지가 표시됩니다.

HTML5 요소 <canvas>는 JavaScript를 사용하여 그래픽을 그리는 쉽고 강력한 방법을 제공합니다. 그래프를 그리거나 사진 구성을 만들거나 간단한 (그렇지 않은) 애니메이션을 만드는 데 사용할 수 있습니다.

다음은 두 개의 특정 속성 만있는 간단한 <canvas> 요소입니다. widthheight 그리고 id, name, class 등과 같은 모든 핵심 HTML5 속성을 포함합니다.

<canvas id = "mycanvas" width = "100" height = "100"></canvas>

다음과 같이 getElementById () 메서드를 사용하여 DOM에서 <canvas> 요소를 쉽게 찾을 수 있습니다.

var canvas = document.getElementById("mycanvas");

HTML5 문서에서 <canvas> 요소를 사용하는 간단한 예를 살펴 보겠습니다.

<!DOCTYPE HTML>

<html>
   <head>
   
      <style>
         #mycanvas{border:1px solid red;}
      </style>
   </head>
   
   <body>
      <canvas id = "mycanvas" width = "100" height = "100"></canvas>
   </body>
</html>

이것은 다음 결과를 생성합니다-

렌더링 컨텍스트

<canvas>는 처음에는 비어 있으며 무언가를 표시하려면 먼저 스크립트가 렌더링 컨텍스트에 액세스하여 그 위에 그려야합니다.

캔버스 요소에는 다음과 같은 DOM 메소드가 있습니다. getContext, 렌더링 컨텍스트 및 해당 그리기 기능을 가져 오는 데 사용됩니다. 이 함수는 컨텍스트 유형 인 하나의 매개 변수를 사용합니다.2d.

다음은 브라우저가 <canvas> 요소를 지원하는지 확인과 함께 필요한 컨텍스트를 얻는 코드입니다.

var canvas  = document.getElementById("mycanvas");

if (canvas.getContext) {   
   var ctx = canvas.getContext('2d');   
   // drawing code here   
} else {   
   
   // canvas-unsupported code here 
}

브라우저 지원

최신 버전의 Firefox, Safari, Chrome 및 Opera는 모두 HTML5 Canvas를 지원하지만 IE8은 캔버스를 기본적으로 지원하지 않습니다.

ExplorerCanvas 를 사용 하여 Internet Explorer를 통해 캔버스를 지원할 수 있습니다 . 다음과 같이이 JavaScript를 포함하면됩니다.

<!--[if IE]><script src = "excanvas.js"></script><![endif]-->

HTML5 Canvas 예

이 튜토리얼에서는 HTML5 <canvas> 요소와 관련된 다음 예제를 다룹니다.

Sr. 아니. 예 및 설명
1 직사각형 그리기

HTML5 <canvas> 요소를 사용하여 직사각형을 그리는 방법 알아보기

2 드로잉 경로

HTML5 <canvas> 요소의 경로를 사용하여 모양을 만드는 방법 알아보기

선 그리기

HTML5 <canvas> 요소를 사용하여 선을 그리는 방법 알아보기

4 베 지어 그리기

HTML5 <canvas> 요소를 사용하여 베 지어 곡선을 그리는 방법 알아보기

5 2 차 그리기

HTML5 <canvas> 요소를 사용하여 2 차 곡선을 그리는 방법 알아보기

6 이미지 사용

HTML5 <canvas> 요소와 함께 이미지를 사용하는 방법 알아보기

7 그라디언트 만들기

HTML5 <canvas> 요소를 사용하여 그라디언트를 만드는 방법 알아보기

8 스타일과 색상

HTML5 <canvas> 요소를 사용하여 스타일과 색상을 적용하는 방법 알아보기

9 텍스트 및 글꼴

다양한 글꼴과 크기를 사용하여 놀라운 텍스트를 그리는 방법을 알아보십시오.

10 패턴과 그림자

다양한 패턴을 그리고 그림자를 그리는 방법을 배웁니다.

11 캔버스 상태

캔버스에서 복잡한 그림을 그리는 동안 캔버스 상태를 저장하고 복원하는 방법을 알아 봅니다.

12 캔버스 번역

이 방법은 캔버스와 원점을 그리드의 다른 지점으로 이동하는 데 사용됩니다.

13 캔버스 회전

이 방법은 현재 원점을 중심으로 캔버스를 회전하는 데 사용됩니다.

14 캔버스 스케일링

이 방법은 캔버스 그리드에서 단위를 늘리거나 줄이는 데 사용됩니다.

15 캔버스 변환

이러한 방법을 사용하면 변환 매트릭스를 직접 수정할 수 있습니다.

16 캔버스 구성

이 방법은 캔버스에서 특정 영역을 가리거나 부분을 지우는 데 사용됩니다.

17 캔버스 애니메이션

HTML5 Canvas 및 JavaScript를 사용하여 기본 애니메이션을 만드는 방법을 알아 봅니다.

HTML5 기능에는 Flash 없이도 기본 오디오 및 비디오 지원이 포함됩니다.

HTML5 <audio> 및 <video> 태그를 사용하면 웹 사이트에 미디어를 간단하게 추가 할 수 있습니다. 설정해야합니다.src 속성은 미디어 소스를 식별하고 사용자가 미디어를 재생 및 일시 중지 할 수 있도록 컨트롤 속성을 포함합니다.

비디오 삽입

다음은 웹 페이지에 비디오 파일을 삽입하는 가장 간단한 형태입니다.

<video src = "foo.mp4"  width = "300" height = "200" controls>
   Your browser does not support the <video> element.   
</video>

현재 HTML5 초안 사양은 브라우저가 동영상 태그에서 지원해야하는 동영상 형식을 지정하지 않습니다. 그러나 가장 일반적으로 사용되는 비디오 형식은 다음과 같습니다.

  • Ogg − Thedora 비디오 코덱 및 Vorbis 오디오 코덱이 포함 된 Ogg 파일.

  • mpeg4 − H.264 비디오 코덱 및 AAC 오디오 코덱이있는 MPEG4 파일.

<source> 태그를 사용하여 미디어 유형 및 기타 여러 속성과 함께 미디어를 지정할 수 있습니다. 비디오 요소는 여러 소스 요소를 허용하고 브라우저는 처음 인식 된 형식을 사용합니다.

<!DOCTYPE HTML>

<html>
   <body>
      
      <video  width = "300" height = "200" controls autoplay>
         <source src = "/html5/foo.ogg" type ="video/ogg" />
         <source src = "/html5/foo.mp4" type = "video/mp4" />
         Your browser does not support the <video> element.
      </video>
      
   </body>
</html>

이것은 다음 결과를 생성합니다-

비디오 속성 사양

HTML5 비디오 태그는 컨트롤의 모양과 느낌과 다양한 기능을 제어하는 ​​여러 속성을 가질 수 있습니다.

Sr. 아니. 속성 및 설명
1

autoplay

이 부울 속성을 지정하면 데이터로드를 완료하기 위해 중지하지 않고 가능한 한 빨리 비디오가 자동으로 재생되기 시작합니다.

2

autobuffer

이 부울 속성이 지정되면 자동으로 재생되도록 설정되지 않은 경우에도 동영상이 자동으로 버퍼링을 시작합니다.

controls

이 속성이 있으면 사용자가 볼륨, 검색 및 재생 일시 중지 / 다시 시작을 포함하여 비디오 재생을 제어 할 수 있습니다.

4

height

이 속성은 CSS 픽셀 단위로 동영상 표시 영역의 높이를 지정합니다.

5

loop

이 부울 속성을 지정하면 끝 부분에 도달 한 후 비디오가 자동으로 시작 부분으로 되돌아 갈 수 있습니다.

6

preload

이 속성은 페이지로드시 동영상이로드되고 실행할 준비가되도록 지정합니다. 자동 재생이있는 경우 무시됩니다.

7

poster

사용자가 재생하거나 찾을 때까지 표시 할 이미지의 URL입니다.

8

src

삽입 할 동영상의 URL입니다. 이것은 선택 사항입니다. 대신 비디오 블록 내에서 <source> 요소를 사용하여 포함 할 비디오를 지정할 수 있습니다.

9

width

이 속성은 CSS 픽셀 단위로 동영상 표시 영역의 너비를 지정합니다.

오디오 삽입

HTML5는 다음과 같이 HTML 또는 XHTML 문서에 사운드 콘텐츠를 삽입하는 데 사용되는 <audio> 태그를 지원합니다.

<audio src = "foo.wav" controls autoplay>
   Your browser does not support the <audio> element.   
</audio>

현재 HTML5 초안 사양은 브라우저가 오디오 태그에서 지원해야하는 오디오 형식을 지정하지 않습니다. 그러나 가장 일반적으로 사용되는 오디오 형식은ogg, mp3wav.

<source & ggt; 태그를 사용하여 미디어 유형 및 기타 여러 속성과 함께 미디어를 지정합니다. 오디오 요소는 여러 소스 요소를 허용하고 브라우저는 처음 인식 된 형식을 사용합니다.

<!DOCTYPE HTML>

<html>
   <body>
      
      <audio controls autoplay>
         <source src = "/html5/audio.ogg" type = "audio/ogg" />
         <source src = "/html5/audio.wav" type = "audio/wav" />
         Your browser does not support the <audio> element.
      </audio>
      
   </body>
</html>

이것은 다음 결과를 생성합니다-

오디오 속성 사양

HTML5 오디오 태그는 컨트롤의 모양과 느낌과 다양한 기능을 제어하는 ​​여러 속성을 가질 수 있습니다.

Sr. 아니. 속성 및 설명
1

autoplay

이 부울 속성이 지정되면 데이터로드를 완료하기 위해 중지하지 않고 가능한 한 빨리 오디오가 자동으로 재생되기 시작합니다.

2

autobuffer

이 부울 속성이 지정되면 자동으로 재생되도록 설정되지 않은 경우에도 오디오가 자동으로 버퍼링을 시작합니다.

controls

이 속성이 있으면 사용자가 볼륨, 검색 및 재생 일시 중지 / 다시 시작을 포함한 오디오 재생을 제어 할 수 있습니다.

4

loop

이 부울 속성이 지정되면 오디오가 끝에 도달 한 후 자동으로 시작 부분으로 되돌아 갈 수 있습니다.

5

preload

이 속성은 페이지로드시 오디오가로드되고 실행할 준비가되도록 지정합니다. 자동 재생이있는 경우 무시됩니다.

6

src

삽입 할 오디오의 URL입니다. 이것은 선택 사항입니다. 대신 비디오 블록 내에서 <source> 요소를 사용하여 포함 할 비디오를 지정할 수 있습니다.

미디어 이벤트 처리

HTML5 오디오 및 비디오 태그는 JavaScript를 사용하여 컨트롤의 다양한 기능을 제어하는 ​​여러 속성을 가질 수 있습니다.

S. 아니. 이벤트 및 설명
1

abort

이 이벤트는 재생이 중단 될 때 생성됩니다.

2

canplay

이 이벤트는 미디어를 재생할 수있는 충분한 데이터를 사용할 수있을 때 생성됩니다.

ended

이 이벤트는 재생이 완료 될 때 생성됩니다.

4

error

이 이벤트는 오류가 발생할 때 생성됩니다.

5

loadeddata

이 이벤트는 미디어의 첫 번째 프레임로드가 완료 될 때 생성됩니다.

6

loadstart

이 이벤트는 미디어로드가 시작될 때 생성됩니다.

7

pause

이 이벤트는 재생이 일시 중지 될 때 생성됩니다.

8

play

이 이벤트는 재생이 시작되거나 다시 시작될 때 생성됩니다.

9

progress

이 이벤트는 미디어 다운로드 진행률을 알리기 위해 주기적으로 생성됩니다.

10

ratechange

이 이벤트는 재생 속도가 변경 될 때 생성됩니다.

11

seeked

이 이벤트는 탐색 작업이 완료 될 때 생성됩니다.

12

seeking

이 이벤트는 탐색 작업이 시작될 때 생성됩니다.

13

suspend

이 이벤트는 미디어로드가 일시 중단 될 때 생성됩니다.

14

volumechange

이 이벤트는 오디오 볼륨이 변경 될 때 생성됩니다.

15

waiting

이 이벤트는 요청 된 작업 (예 : 재생)이 다른 작업 (예 : 탐색)의 완료를 보류하여 지연 될 때 생성됩니다.

다음은 주어진 비디오를 재생할 수있는 예입니다.

<!DOCTYPE HTML>

<html>
   <head>
   
      <script type = "text/javascript">
         function PlayVideo() {
            var v = document.getElementsByTagName("video")[0];  
            v.play(); 
         }
      </script>
   </head>
   
   <body>
   
      <form>         
         <video width = "300" height = "200" src = "/html5/foo.mp4">
         Your browser does not support the video element.
         </video>
         <br />
         <input type = "button" onclick = "PlayVideo();" value = "Play"/>
      </form>
      
   </body>
</html>

이것은 다음 결과를 생성합니다-

미디어 유형에 대한 서버 구성

대부분의 서버는 기본적으로 올바른 MIME 유형으로 Ogg 또는 mp4 미디어를 제공하지 않으므로 이에 대한 적절한 구성을 추가해야합니다.

AddType audio/ogg .oga
AddType audio/wav .wav
AddType video/ogg .ogv .ogg
AddType video/mp4 .mp4

HTML5 Geolocation API를 사용하면 즐겨 찾는 웹 사이트와 위치를 공유 할 수 있습니다. JavaScript는 위도와 경도를 캡처 할 수 있으며 백엔드 웹 서버로 전송 될 수 있으며 지역 비즈니스를 찾거나지도에 위치를 표시하는 것과 같은 멋진 위치 인식 작업을 수행 할 수 있습니다.

오늘날 대부분의 브라우저와 모바일 장치는 Geolocation API를 지원합니다. 지리적 위치 API는 전역 내비게이터 객체의 새 속성 (예 : 다음과 같이 생성 할 수있는 Geolocation 객체-

var geolocation = navigator.geolocation;

지리적 위치 개체는 위젯이 장치의 지리적 위치에 대한 정보를 검색 할 수 있도록하는 서비스 개체입니다.

지리적 위치 방법

지리적 위치 객체는 다음과 같은 방법을 제공합니다-

Sr. 아니. 방법 및 설명
1 getCurrentPosition ()

이 메서드는 사용자의 현재 지리적 위치를 검색합니다.

2 watchPosition ()

이 메서드는 장치의 현재 지리적 위치에 대한주기적인 업데이트를 검색합니다.

clearWatch ()

이 메서드는 진행중인 watchPosition 호출을 취소합니다.

다음은 위의 방법 중 하나를 사용하는 샘플 코드입니다.

function getLocation() {
   var geolocation = navigator.geolocation;
   geolocation.getCurrentPosition(showLocation, errorHandler);
}

여기서 showLocation 및 errorHandler는 다음 섹션에서 설명하는 실제 위치를 가져오고 오류가있는 경우 처리하는 데 사용되는 콜백 메서드입니다.

위치 속성

Geolocation 메서드 getCurrentPosition () 및 getPositionUsingMethodName ()은 위치 정보를 검색하는 콜백 메서드를 지정합니다. 이러한 메서드는 객체와 비동기 적으로 호출됩니다.Position 전체 위치 정보를 저장합니다.

그만큼 Position개체는 장치의 현재 지리적 위치를 지정합니다. 위치는 방향 및 속도에 대한 정보와 함께 지리적 좌표 집합으로 표현됩니다.

다음 표는 Position 객체의 속성을 설명합니다. 선택적 속성의 경우 시스템이 값을 제공 할 수없는 경우 속성 값은 null로 설정됩니다.

특성 유형 기술
좌표 사물 장치의 지리적 위치를 지정합니다. 위치는 방향 및 속도에 대한 정보와 함께 지리적 좌표 세트로 표현됩니다.
coords.latitude 번호 위도 추정치를 십진 단위로 지정합니다. 값 범위는 [-90.00, +90.00]입니다.
coords.longitude 번호 경도 추정치를 십진 단위로 지정합니다. 값 범위는 [-180.00, +180.00]입니다.
coords.altitude 번호 [선택 사항] WGS 84 타원체 위의 고도 추정치를 미터 단위로 지정합니다.
coords.accuracy 번호 [선택 사항] 위도 및 경도 추정의 정확도를 미터 단위로 지정합니다.
coords.altitudeAccuracy 번호 [선택 사항] 고도 추정 정확도를 미터 단위로 지정합니다.
coords.heading 번호 [선택 사항] 진북을 기준으로 시계 방향으로 계수되는 장치의 현재 이동 방향을 지정합니다.
coords.speed 번호 [선택 사항] 장치의 현재 지상 속도를 초당 미터로 지정합니다.
타임 스탬프 데이트 위치 정보가 검색되고 Position 객체가 생성 된 시간을 지정합니다.

다음은 Position 객체를 사용하는 샘플 코드입니다. 여기서 showLocation 메서드는 콜백 메서드입니다.

function showLocation( position ) {
   var latitude = position.coords.latitude;
   var longitude = position.coords.longitude;
   ...
}

오류 처리

지리적 위치는 복잡하며 오류를 포착하고 우아하게 처리하는 데 매우 많이 필요합니다.

geolocations 메소드 getCurrentPosition () 및 watchPosition ()은 다음을 제공하는 오류 핸들러 콜백 메소드를 사용합니다. PositionError목적. 이 객체는 다음 두 가지 속성을 가지고 있습니다-

특성 유형 기술
암호 번호 오류에 대한 숫자 코드를 포함합니다.
메시지 사람이 읽을 수있는 오류 설명을 포함합니다.

다음 표는 PositionError 객체에서 반환 될 수있는 오류 코드를 설명합니다.

암호 일정한 기술
0 알수없는 오류 알 수없는 오류로 인해 메서드가 장치의 위치를 ​​검색하지 못했습니다.
1 PERMISSION_DENIED 애플리케이션에 위치 서비스를 사용할 수있는 권한이 없기 때문에 메서드가 장치의 위치를 ​​검색하지 못했습니다.
2 POSITION_UNAVAILABLE 장치의 위치를 ​​확인할 수 없습니다.
시간 초과 메서드가 지정된 최대 시간 초과 간격 내에 위치 정보를 검색 할 수 없습니다.

다음은 PositionError 객체를 사용하는 샘플 코드입니다. 여기서 errorHandler 메서드는 콜백 메서드입니다.

function errorHandler( err ) {
   
   if (err.code == 1) {
      
      // access is denied
   }
   ...
}

포지션 옵션

다음은 getCurrentPosition () 메서드의 실제 구문입니다.

getCurrentPosition(callback, ErrorCallback, options)

여기에서 세 번째 인수는 PositionOptions 장치의 지리적 위치를 검색하기위한 옵션 세트를 지정하는 객체입니다.

다음은 세 번째 인수로 지정할 수있는 옵션입니다.

특성 유형 기술
enableHighAccuracy 부울 위젯이 가능한 가장 정확한 위치 추정치를 수신할지 여부를 지정합니다. 기본적으로 이것은 false입니다.
타임 아웃 번호 timeout 속성은 웹 응용 프로그램이 위치를 기꺼이 기다리는 시간 (밀리 초)입니다.
maximumAge 번호 캐시 된 위치 정보의 만료 시간 (밀리 초)을 지정합니다.

다음은 위에서 언급 한 방법을 사용하는 방법을 보여주는 샘플 코드입니다.

function getLocation() {
   var geolocation = navigator.geolocation;
   geolocation.getCurrentPosition(showLocation, errorHandler, {maximumAge: 75000});
}

마이크로 데이터는 웹 페이지에 추가적인 의미를 제공하는 표준화 된 방법입니다.

Microdata를 사용하면 사용자 지정 요소를 정의하고 웹 페이지에 사용자 지정 속성을 포함 할 수 있습니다. 상위 수준에서 마이크로 데이터는 이름-값 쌍 그룹으로 구성됩니다.

그룹은 items, 각 이름-값 쌍은 property. 항목과 속성은 일반 요소로 표시됩니다.

  • 항목을 생성하려면 itemscope 속성이 사용됩니다.

  • 항목에 속성을 추가하려면 itemprop 속성은 항목의 하위 항목 중 하나에 사용됩니다.

여기에 각각 "이름"속성이있는 두 개의 항목이 있습니다.

<html>
   <body>
      
      <div itemscope>
         <p>My name is <span itemprop = "name">Zara</span>.</p>
      </div>
      
      <div itemscope>
         <p>My name is <span itemprop = "name">Nuha</span>.</p>
      </div>
      
   </body>
</html>

다음 결과가 생성됩니다-

속성은 일반적으로 문자열 값을 가지고 있지만 다음 데이터 유형을 가질 수 있습니다-

글로벌 속성

Microdata는 모든 요소에서 사용할 수있는 5 가지 전역 속성을 도입하고 데이터에 대한 머신의 컨텍스트를 제공합니다.

Sr. 아니. 속성 및 설명
1

itemscope

아이템을 생성하는 데 사용됩니다. itemscope 속성은이 페이지에 마이크로 데이터가 있으며 여기에서 시작된다는 것을 알려주는 부울 속성입니다.

2

itemtype

이 속성은 항목을 정의하고 속성에 대한 컨텍스트를 제공하는 유효한 URL입니다.

itemid

이 속성은 항목의 전역 식별자입니다.

4

itemprop

이 속성은 항목의 속성을 정의합니다.

5

itemref

이 속성은 항목의 이름-값 쌍을 찾기 위해 크롤링 할 추가 요소 목록을 제공합니다.

속성 데이터 유형

속성에는 일반적으로 위의 예에서 언급 한 문자열 인 값이 있지만 URL 인 값도있을 수 있습니다. 다음 예제에는 값이 URL 인 "image"라는 하나의 속성이 있습니다.

<div itemscope>
   <img itemprop = "image" src = "tp-logo.gif" alt = "TutorialsPoint">
</div>

속성은 날짜, 시간 또는 날짜와 시간 값을 가질 수도 있습니다. 이것은time 요소와 그 datetime 속성.

<html>
   <body>
      
      <div itemscope>
         My birthday is:
         <time itemprop = "birthday" datetime = "1971-05-08">
            Aug 5th 1971
         </time>
      </div>
      
   </body>
</html>

다음 결과가 생성됩니다-

속성을 선언하는 요소에 itemscope 속성을 넣어 속성 자체가 이름-값 쌍의 그룹이 될 수도 있습니다.

Microdata API 지원

브라우저가 HTML5 마이크로 데이터 API를 지원하는 경우 전역 문서 객체에 getItems () 함수가 있습니다. 브라우저가 마이크로 데이터를 지원하지 않으면 getItems () 함수가 정의되지 않습니다.

function supports_microdata_api() {
   return !!document.getItems;
}

Modernizr는 아직 마이크로 데이터 API 검사를 지원하지 않으므로 위에 나열된 것과 같은 함수를 사용해야합니다.

HTML5 마이크로 데이터 표준에는 HTML 마크 업 (주로 검색 엔진 용)과 DOM 기능 집합 (주로 브라우저 용)이 모두 포함됩니다.

웹 페이지에 마이크로 데이터 마크 업을 포함 할 수 있으며 마이크로 데이터 속성을 이해하지 못하는 검색 엔진은이를 무시합니다. 그러나 DOM을 통해 마이크로 데이터에 액세스하거나 조작해야하는 경우 브라우저가 마이크로 데이터 DOM API를 지원하는지 확인해야합니다.

마이크로 데이터 어휘 정의

마이크로 데이터 어휘를 정의하려면 작동중인 웹 페이지를 가리키는 네임 스페이스 URL이 필요합니다. 예를 들어 https://data-vocabulary.org/Person은 다음과 같은 이름의 속성을 가진 개인 마이크로 데이터 어휘의 네임 스페이스로 사용될 수 있습니다.

  • name − 간단한 문자열로 된 사람 이름

  • Photo − 사람 사진에 대한 URL.

  • URL − 그 사람의 웹 사이트.

약 속성을 사용하면 사람 마이크로 데이터는 다음과 같습니다.

<html>
   <body>
   
      <div itemscope>
         <section itemscope itemtype = "http://data-vocabulary.org/Person">
            <h1 itemprop = "name">Gopal K Varma</h1>
         
            <p>
               <img itemprop = "photo" 
                  src = "http://www.tutorialspoint.com/green/images/logo.png">
            </p>
            
            <a itemprop = "url" href = "#">Site</a>
         </section>
      </div>
      
   </body>
</html>

다음 결과가 생성됩니다-

Google은 리치 스 니펫 프로그램의 일부로 마이크로 데이터를 지원합니다. Google의 웹 크롤러가 페이지를 파싱하고 http://datavocabulary.org/Person 어휘를 준수하는 마이크로 데이터 속성을 찾으면 해당 속성을 파싱하여 나머지 페이지 데이터와 함께 저장합니다.

http://www.tutorialspoint.com/html5/microdata.htm을 사용하여 Rich Snippets Testing Tool을 사용 하여 위의 예를 테스트 할 수 있습니다 .

Microdata에 대한 추가 개발은 언제든지 HTML5 Microdata를 참조 할 수 있습니다 .

드래그 앤 드롭 (DnD)은 강력한 사용자 인터페이스 개념으로 마우스 클릭으로 항목을 쉽게 복사, 재정렬 및 ​​삭제할 수 있습니다. 이를 통해 사용자는 요소 위에서 마우스 버튼을 클릭 한 상태에서 다른 위치로 드래그 한 다음 마우스 버튼을 놓아 요소를 드롭 할 수 있습니다.

기존 HTML4로 드래그 앤 드롭 기능을 구현하려면 개발자는 복잡한 JavaScript 프로그래밍 또는 jQuery 등과 같은 다른 JavaScript 프레임 워크를 사용해야합니다.

이제 HTML 5는 브라우저에 기본 DnD 지원을 제공하는 드래그 앤 드롭 (DnD) API를 제공하여 훨씬 쉽게 코딩 할 수 있습니다.

HTML 5 DnD는 Chrome, Firefox 3.5 및 Safari 4 등과 같은 모든 주요 브라우저에서 지원됩니다.

드래그 앤 드롭 이벤트

드래그 앤 드롭 작업의 다양한 단계에서 발생하는 많은 이벤트가 있습니다. 이러한 이벤트는 다음과 같습니다.

Sr. 아니. 이벤트 및 설명
1

dragstart

사용자가 개체 드래그를 시작하면 실행됩니다.

2

dragenter

드래그가 발생하는 동안 마우스가 대상 요소 위로 처음 이동하면 시작됩니다. 이 이벤트의 리스너는이 위치에서 드롭이 허용되는지 여부를 나타내야합니다. 리스너가 없거나 리스너가 작업을 수행하지 않는 경우 기본적으로 드롭이 허용되지 않습니다.

dragover

이 이벤트는 드래그가 발생할 때 요소 위로 마우스를 이동하면 시작됩니다. 대부분의 경우 리스너 중에 발생하는 작업은 dragenter 이벤트와 동일합니다.

4

dragleave

이 이벤트는 드래그가 발생하는 동안 마우스가 요소를 떠날 때 시작됩니다. 청취자는 드롭 피드백에 사용되는 강조 표시 또는 삽입 마커를 제거해야합니다.

5

drag

개체가 드래그되는 동안 마우스가 움직일 때마다 발생합니다.

6

drop

드래그 작업이 끝날 때 드롭이 발생한 요소에서 드롭 이벤트가 시작됩니다. 리스너는 드래그되는 데이터를 검색하여 드롭 위치에 삽입해야합니다.

7

dragend

사용자가 개체를 드래그하는 동안 마우스 버튼을 놓을 때 발생합니다.

Note− 드래그 이벤트 만 발생합니다. mousemove 와 같은 마우스 이벤트 는 드래그 작업 중에 발생하지 않습니다.

DataTransfer 객체

모든 드래그 앤 드롭 이벤트에 대한 이벤트 리스너 메서드는 Event 읽기 전용 속성이있는 객체 dataTransfer.

그만큼 event.dataTransfer 보고 DataTransfer 다음과 같이 이벤트와 관련된 객체-

function EnterHandler(event) {
   DataTransfer dt = event.dataTransfer;
   .............
}

의 dataTransfer의 객체는 드래그 앤 드롭 작업에 대한 데이터를 보유하고 있습니다. 이 데이터는 아래 설명 된 바와 같이 DataTransfer 객체와 관련된 다양한 속성의 관점에서 검색 및 설정할 수 있습니다.

Sr. 아니. DataTransfer 속성 및 설명
1

dataTransfer.dropEffect [ = value ]

  • 현재 선택된 작업의 종류를 반환합니다.

  • 이 속성을 설정하여 선택한 작업을 변경할 수 있습니다.

  • 가능한 값은 없음, 복사, 연결 및 이동입니다.

2

dataTransfer.effectAllowed [ = value ]

  • 허용되는 작업의 종류를 반환합니다.

  • 이 속성을 설정하여 허용 된 작업을 변경할 수 있습니다.

  • 가능한 값은 다음과 같습니다. none, copy, copyLink, copyMove, link, linkMove, move, alluninitialized.

dataTransfer.types

dragstart 이벤트에 설정된 형식을 나열하는 DOMStringList를 반환합니다. 또한 드래그되는 파일이있는 경우 유형 중 하나가 "Files"문자열이됩니다.

4

dataTransfer.clearData ( [ format ] )

지정된 형식의 데이터를 제거합니다. 인수가 생략 된 경우 모든 데이터를 제거합니다.

5

dataTransfer.setData(format, data)

지정된 데이터를 추가합니다.

6

data = dataTransfer.getData(format)

지정된 데이터를 반환합니다. 그러한 데이터가 없으면 빈 문자열을 반환합니다.

7

dataTransfer.files

드래그되는 파일의 FileList를 반환합니다.

8

dataTransfer.setDragImage(element, x, y)

지정된 요소를 사용하여 드래그 피드백을 업데이트하고 이전에 지정된 피드백을 대체합니다.

9

dataTransfer.addElement(element)

드래그 피드백을 렌더링하는 데 사용되는 요소 목록에 지정된 요소를 추가합니다.

드래그 앤 드롭 프로세스

다음은 드래그 앤 드롭 작업을 구현하기 위해 수행해야 할 단계입니다.

1 단계-개체를 드래그 가능하게 만들기

취해야 할 단계는 다음과 같습니다.

  • 요소를 드래그하려면 draggable 속성 true 해당 요소에 대해.

  • 이벤트 리스너 설정 dragstart 드래그되는 데이터를 저장합니다.

  • 이벤트 리스너 dragstart 허용되는 효과 (복사, 이동, 링크 또는 일부 조합)를 설정합니다.

다음은 드래그 할 수있는 개체를 만드는 예입니다.

<!DOCTYPE HTML>

<html>
   <head>
      
      <style type = "text/css">
         
         #boxA, #boxB {
            float:left;padding:10px;margin:10px; -moz-user-select:none;
         }
         #boxA { background-color: #6633FF; width:75px; height:75px;  }
         #boxB { background-color: #FF6699; width:150px; height:150px; }
      </style>
      
      <script type = "text/javascript">
         
         function dragStart(ev) {
            ev.dataTransfer.effectAllowed = 'move';
            ev.dataTransfer.setData("Text", ev.target.getAttribute('id'));
            ev.dataTransfer.setDragImage(ev.target,0,0);
            
            return true;
         }
      </script>
      
   </head>
   <body>
      
      <center>
         <h2>Drag and drop HTML5 demo</h2>
         <div>Try to drag the purple box around.</div>
         
         <div id = "boxA" draggable = "true" 
            ondragstart = "return dragStart(ev)">
            <p>Drag Me</p>
         </div>
         
         <div id = "boxB">Dustbin</div>
      </center>
      
   </body>
</html>

이것은 다음 결과를 생성합니다-

2 단계-개체 놓기

드롭을 수락하려면 드롭 대상이 최소 3 개의 이벤트를 수신해야합니다.

  • 그만큼 dragenter드롭 대상이 드롭을 수락할지 여부를 결정하는 데 사용되는 이벤트입니다. 드롭을 수락하려면이 이벤트를 취소해야합니다.

  • 그만큼 dragover사용자에게 표시 할 피드백을 결정하는 데 사용되는 이벤트입니다. 이벤트가 취소되면 dropEffect 속성 값에 따라 피드백 (일반적으로 커서)이 업데이트됩니다.

  • 마지막으로 drop 이벤트, 실제 드롭을 수행 할 수 있습니다.

다음은 객체를 다른 객체에 드롭하는 예입니다.

<html>
   <head>
      <style type="text/css">
         #boxA, #boxB {
            float:left;padding:10px;margin:10px;-moz-user-select:none;
         }
         #boxA { background-color: #6633FF; width:75px; height:75px;  }
         #boxB { background-color: #FF6699; width:150px; height:150px; }
      </style>
      <script type="text/javascript">
         function dragStart(ev) {
            ev.dataTransfer.effectAllowed='move';
            ev.dataTransfer.setData("Text", ev.target.getAttribute('id'));
            ev.dataTransfer.setDragImage(ev.target,0,0);
            return true;
         }
         function dragEnter(ev) {
            event.preventDefault();
            return true;
         }
         function dragOver(ev) {
            return false;
         }
         function dragDrop(ev) {
            var src = ev.dataTransfer.getData("Text");
            ev.target.appendChild(document.getElementById(src));
            ev.stopPropagation();
            return false;
         }
      </script>
   </head>
   <body>
      <center>
         <h2>Drag and drop HTML5 demo</h2>
         <div>Try to move the purple box into the pink box.</div>
         <div id="boxA" draggable="true" ondragstart="return dragStart(event)">
            <p>Drag Me</p>
         </div>
         <div id="boxB" ondragenter="return dragEnter(event)" ondrop="return dragDrop(event)" ondragover="return dragOver(event)">Dustbin</div>
      </center>
   </body>
</html>

이것은 다음 결과를 생성합니다-

JavaScript는 단일 스레드 환경에서 실행되도록 설계되었으므로 여러 스크립트를 동시에 실행할 수 없습니다. UI 이벤트를 처리하고, 많은 양의 API 데이터를 쿼리 및 처리하고, DOM을 조작해야하는 상황을 고려하십시오.

CPU 사용률이 높은 상황에서는 JavaScript가 브라우저를 중단합니다. JavaScript가 큰 루프를 통과하는 간단한 예를 들어 보겠습니다.

<!DOCTYPE HTML>

<html>
   <head>
      <title>Big for loop</title>
      
      <script>
         function bigLoop() {
            
            for (var i = 0; i <= 10000; i += 1) {
               var j = i;
            }
            alert("Completed " + j + "iterations" );
         }
         
         function sayHello(){
            alert("Hello sir...." );
         }
      </script>
      
   </head>
   
   <body>
      <input type = "button" onclick = "bigLoop();" value = "Big Loop" />
      <input type = "button" onclick = "sayHello();" value = "Say Hello" />
   </body>
</html>

다음 결과가 생성됩니다-

Big Loop 버튼을 클릭하면 Firefox에 다음과 같은 결과가 표시됩니다-

Web Workers 란 무엇입니까?

위에서 설명한 상황은 다음을 사용하여 처리 할 수 ​​있습니다. Web Workers 사용자 인터페이스를 중단하지 않고 계산 비용이 많이 드는 모든 작업을 수행하며 일반적으로 별도의 스레드에서 실행됩니다.

웹 워커는 클릭 또는 기타 사용자 상호 작용에 응답하는 스크립트에 의해 중단되지 않는 장기 실행 스크립트를 허용하고 페이지 응답을 유지하지 않고도 긴 작업을 실행할 수 있습니다.

웹 워커는 백그라운드 스크립트이며 비교적 무겁고 많은 수로 사용하기위한 것이 아닙니다. 예를 들어, 4 메가 ​​픽셀 이미지의 각 픽셀에 대해 하나의 작업자를 시작하는 것은 부적절합니다.

스크립트가 Web Worker 내에서 실행 중이면 웹 페이지의 창 개체 (window.document)에 액세스 할 수 없습니다. 즉, Web Worker가 웹 페이지 및 DOM API에 직접 액세스 할 수 없습니다. Web Workers는 브라우저 UI를 차단할 수 없지만 여전히 CPU주기를 소비하고 시스템의 응답 성을 떨어 뜨릴 수 있습니다.

웹 작업자는 어떻게 작동합니까?

웹 작업자는 작업자가 실행할 코드가 포함 된 JavaScript 파일의 URL로 초기화됩니다. 이 코드는 이벤트 리스너를 설정하고 메인 페이지에서 생성 한 스크립트와 통신합니다. 다음은 간단한 구문입니다-

var worker = new Worker('bigLoop.js');

지정된 자바 스크립트 파일이있는 경우 브라우저는 비동기 적으로 다운로드되는 새 작업자 스레드를 생성합니다. 작업자 경로가 404 오류를 반환하면 작업자가 자동으로 실패합니다.

애플리케이션에 지원되는 JavaScript 파일이 여러 개있는 경우 가져올 수 있습니다. importScripts() 다음과 같이 쉼표로 구분 된 인수로 파일 이름을 취하는 방법-

importScripts("helper.js", "anotherHelper.js");

웹 워커가 생성되면 웹 워커와 상위 페이지 간의 통신은 postMessage()방법. 브라우저 / 버전에 따라 postMessage ()는 문자열 또는 JSON 객체를 단일 인수로 받아 들일 수 있습니다.

Web Worker가 전달한 메시지는 onmessage메인 페이지에서 이벤트. 이제 Web Worker를 사용하여 bigLoop 예제를 작성해 보겠습니다. 다음은 웹 워커를 생성하여 루프를 실행하고 변수의 최종 값을 반환하는 메인 페이지 (hello.htm)입니다.j

<!DOCTYPE HTML>

<html>
   <head>
      <title>Big for loop</title>
      
      <script>
         var worker = new Worker('bigLoop.js');
         
         worker.onmessage = function (event) {
            alert("Completed " + event.data + "iterations" );
         };
         
         function sayHello() {
            alert("Hello sir...." );
         }
      </script>
   </head>
   
   <body>
      <input type = "button" onclick = "sayHello();" value = "Say Hello"/>
   </body>
</html>

다음은 bigLoop.js 파일의 내용입니다. 이것은 사용합니다postMessage() 통신을 메인 페이지로 다시 전달하는 API-

for (var i = 0; i <= 1000000000; i += 1) {
   var j = i;
}
postMessage(j);

이것은 다음 결과를 생성합니다-

웹 워커 중지

웹 워커는 스스로 멈추지 않지만 자신을 시작한 페이지는 다음을 호출하여 중지 할 수 있습니다. terminate() 방법.

worker.terminate();

종료 된 웹 작업자는 더 이상 메시지에 응답하거나 추가 계산을 수행하지 않습니다. 작업자를 다시 시작할 수 없습니다. 대신 동일한 URL을 사용하여 새 작업자를 만들 수 있습니다.

오류 처리

다음은 콘솔에 오류를 기록하는 Web Worker JavaScript 파일의 오류 처리 함수의 예입니다. 오류 처리 코드를 사용하면 위의 예는 다음과 같습니다.

<!DOCTYPE HTML>

<html>
   <head>
      <title>Big for loop</title>
      
      <script>
         var worker = new Worker('bigLoop.js');
         
         worker.onmessage = function (event) {
            alert("Completed " + event.data + "iterations" );
         };
         
         worker.onerror = function (event) {
            console.log(event.message, event);
         };
         
         function sayHello() {
            alert("Hello sir...." );
         }
      </script>
   </head>
   
   <body>
      <input type = "button" onclick = "sayHello();" value = "Say Hello"/>
   </body>
</html>

브라우저 지원 확인

다음은 브라우저에서 사용 가능한 웹 작업자 기능 지원을 감지하는 구문입니다.

<!DOCTYPE HTML>

<html>
   <head>
      <title>Big for loop</title>
      <script src = "/js/modernizr-1.5.min.js"></script>
      
      <script>
      function myFunction() {
         
         if (Modernizr.webworkers) {
            alert("Congratulation!! you have web workers support." );
         } else {
            alert("Sorry!! you do not have web workers support." );
         }
      }
      </script>
   </head>
   
   <body>
      <button onclick = "myFunction()">Click me</button>
   </body>
</html>

이것은 다음 결과를 생성합니다-

indexeddb는 사용자 브라우저에 데이터를 저장하는 새로운 HTML5 개념입니다. indexeddb는 로컬 저장소보다 강력하며 많은 양의 데이터를 저장해야하는 애플리케이션에 유용합니다. 이러한 애플리케이션은 더 효율적으로 실행되고 더 빠르게로드 할 수 있습니다.

indexeddb를 사용하는 이유는 무엇입니까?

W3C는 웹 SQL 데이터베이스가 더 이상 사용되지 않는 로컬 저장소 사양이므로 웹 개발자가이 기술을 더 이상 사용해서는 안된다고 발표했습니다. indexeddb는 웹 SQL 데이터베이스의 대안이며 이전 기술보다 효과적입니다.

풍모

  • 키 쌍 값을 저장합니다.
  • 관계형 데이터베이스가 아닙니다.
  • IndexedDB API는 대부분 비동기식입니다.
  • 구조화 된 쿼리 언어가 아닙니다.
  • 동일한 도메인의 데이터에 액세스 할 수 있도록 지원했습니다.

IndexedDB

indexeddb에 들어가기 전에 아래와 같이 구현 접두사를 추가해야합니다.

window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || 
window.msIndexedDB;
 
window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || 
window.msIDBTransaction;
window.IDBKeyRange = window.IDBKeyRange || 
window.webkitIDBKeyRange || window.msIDBKeyRange
 
if (!window.indexedDB) {
   window.alert("Your browser doesn't support a stable version of IndexedDB.")
}

IndexedDB 데이터베이스 열기

데이터베이스를 생성하기 전에 데이터베이스를위한 데이터를 준비해야합니다. 회사 직원 세부 정보부터 시작하겠습니다.

const employeeData = [
   { id: "01", name: "Gopal K Varma", age: 35, email: "[email protected]" },
   { id: "02", name: "Prasad", age: 24, email: "[email protected]" }
];

데이터 추가

여기에서 아래와 같이 데이터에 수동으로 데이터를 추가합니다.

function add() {
   var request = db.transaction(["employee"], "readwrite")
   .objectStore("employee")
   .add({ id: "01", name: "prasad", age: 24, email: "[email protected]" });
   
   request.onsuccess = function(event) {
      alert("Prasad has been added to your database.");
   };
   
   request.onerror = function(event) {
      alert("Unable to add data\r\nPrasad is already exist in your database! ");
   }
}

데이터 검색

get ()과 함께 사용하여 데이터베이스에서 데이터를 검색 할 수 있습니다.

function read() {
   var transaction = db.transaction(["employee"]);
   var objectStore = transaction.objectStore("employee");
   var request = objectStore.get("00-03");
   
   request.onerror = function(event) {
      alert("Unable to retrieve daa from database!");
   };
   
   request.onsuccess = function(event) {
      
      if(request.result) {
         alert("Name: " + request.result.name + ", Age: 
            " + request.result.age + ", Email: " + request.result.email);
      } else {
         alert("Kenny couldn't be found in your database!");  
      }
   };
}

get ()과 함께 사용하면 데이터를 커서에 저장할 수있는 대신 객체에 데이터를 저장할 수 있고 커서에서 데이터를 검색 할 수 있습니다.

function readAll() {
   var objectStore = db.transaction("employee").objectStore("employee");
   
   objectStore.openCursor().onsuccess = function(event) {
      var cursor = event.target.result;
      
      if (cursor) {
         alert("Name for id " + cursor.key + " is " + cursor.value.name + ", 
            Age: " + cursor.value.age + ", Email: " + cursor.value.email);
         cursor.continue();
      } else {
         alert("No more entries!");
      }
   };
}

데이터 제거

remove ()를 사용하여 IndexedDB에서 데이터를 제거 할 수 있습니다. 코드는 다음과 같습니다.

function remove() {
   var request = db.transaction(["employee"], "readwrite")
   .objectStore("employee")
   .delete("02");
   
   request.onsuccess = function(event) {
      alert("prasad entry has been removed from your database.");
   };
}

HTML 코드

모든 데이터를 표시하려면 아래 코드와 같이 onClick 이벤트를 사용해야합니다.

<!DOCTYPE html>

<html>
   <head>
      <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8" />
      <title>IndexedDb Demo | onlyWebPro.com</title>
   </head>
   
   <body>
      <button onclick = "read()">Read </button>
      <button onclick = "readAll()"></button>
      <button onclick = "add()"></button>
      <button onclick = "remove()">Delete </button>
   </body>
</html>

최종 코드는 다음과 같아야합니다.

<!DOCTYPE html>

<html>
   <head>
      <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8" />
      <script type = "text/javascript">
         
         //prefixes of implementation that we want to test
         window.indexedDB = window.indexedDB || window.mozIndexedDB || 
         window.webkitIndexedDB || window.msIndexedDB;
         
         //prefixes of window.IDB objects
         window.IDBTransaction = window.IDBTransaction || 
         window.webkitIDBTransaction || window.msIDBTransaction;
         window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || 
         window.msIDBKeyRange
         
         if (!window.indexedDB) {
            window.alert("Your browser doesn't support a stable version of IndexedDB.")
         }
         
         const employeeData = [
            { id: "00-01", name: "gopal", age: 35, email: "[email protected]" },
            { id: "00-02", name: "prasad", age: 32, email: "[email protected]" }
         ];
         var db;
         var request = window.indexedDB.open("newDatabase", 1);
         
         request.onerror = function(event) {
            console.log("error: ");
         };
         
         request.onsuccess = function(event) {
            db = request.result;
            console.log("success: "+ db);
         };
         
         request.onupgradeneeded = function(event) {
            var db = event.target.result;
            var objectStore = db.createObjectStore("employee", {keyPath: "id"});
            
            for (var i in employeeData) {
               objectStore.add(employeeData[i]);
            }
         }
         
         function read() {
            var transaction = db.transaction(["employee"]);
            var objectStore = transaction.objectStore("employee");
            var request = objectStore.get("00-03");
            
            request.onerror = function(event) {
               alert("Unable to retrieve daa from database!");
            };
            
            request.onsuccess = function(event) {
               // Do something with the request.result!
               if(request.result) {
                  alert("Name: " + request.result.name + ", 
                     Age: " + request.result.age + ", Email: " + request.result.email);
               } else {
                  alert("Kenny couldn't be found in your database!");
               }
            };
         }
         
         function readAll() {
            var objectStore = db.transaction("employee").objectStore("employee");
            
            objectStore.openCursor().onsuccess = function(event) {
               var cursor = event.target.result;
               
               if (cursor) {
                  alert("Name for id " + cursor.key + " is " + cursor.value.name + ", 
                     Age: " + cursor.value.age + ", Email: " + cursor.value.email);
                  cursor.continue();
               } else {
                  alert("No more entries!");
               }
            };
         }
         
         function add() {
            var request = db.transaction(["employee"], "readwrite")
            .objectStore("employee")
            .add({ id: "00-03", name: "Kenny", age: 19, email: "[email protected]" });
            
            request.onsuccess = function(event) {
               alert("Kenny has been added to your database.");
            };
            
            request.onerror = function(event) {
               alert("Unable to add data\r\nKenny is aready exist in your database! ");
            }
         }
         
         function remove() {
            var request = db.transaction(["employee"], "readwrite")
            .objectStore("employee")
            .delete("00-03");
            
            request.onsuccess = function(event) {
               alert("Kenny's entry has been removed from your database.");
            };
         }
      </script>
      
   </head>
   <body>
      <button onclick = "read()">Read </button>
      <button onclick = "readAll()">Read all </button>
      <button onclick = "add()">Add data </button>
      <button onclick = "remove()">Delete data </button>
   </body>
</html>

다음과 같은 출력이 생성됩니다.

웹 메시징은 서버에서 클라이언트 브라우저로 실시간 메시지를 보내는 기능입니다. 다른 도메인, 프로토콜 또는 포트에서 도메인 간 통신 문제를 무시합니다.

예를 들어 페이지의 데이터를 iframe 또는 음성에 배치 된 광고 컨테이너로 보내려고합니다.이 시나리오에서 브라우저는 보안 예외를 발생시킵니다. 웹 메시징을 사용하면 데이터를 메시지 이벤트로 전달할 수 있습니다.

메시지 이벤트

메시지 이벤트는 문서 간 메시징, 채널 메시징, 서버 전송 이벤트 및 웹 소켓을 발생시킵니다.

속성

Sr. 아니. 속성 및 설명
1

data

문자열 데이터 포함

2

origin

도메인 이름 및 포트 포함

lastEventId

현재 메시지 이벤트에 대한 고유 식별자를 포함합니다.

4

source

원본 문서의 창에 대한 참조를 포함합니다.

5

ports

메시지 포트에서 보낸 데이터를 포함합니다.

문서 간 메시지 보내기

문서 간 메시지를 보내기 전에 새 iframe 또는 새 창을 만들어 새 웹 브라우징 컨텍스트를 만들어야합니다. postMessage ()를 사용하여 데이터를 보낼 수 있으며 두 개의 인수가 있습니다. 그들은-

  • message − 보낼 메시지
  • targetOrigin − 원산지 이름

iframe에서 버튼으로 메시지 보내기

var iframe = document.querySelector('iframe');
var button = document.querySelector('button');

var clickHandler = function() {
   iframe.contentWindow.postMessage('The message to send.',
      'https://www.tutorialspoint.com);
}
button.addEventListener('click',clickHandler,false);

수신 문서에서 문서 간 메시지 수신

var messageEventHandler = function(event){
   
   // check that the origin is one we want.
   if(event.origin == 'https://www.tutorialspoint.com') {
      alert(event.data);
   }
}
window.addEventListener('message', messageEventHandler,false);

채널 메시징

브라우징 컨텍스트 간의 양방향 통신을 채널 메시징이라고합니다. 여러 출처 간의 통신에 유용합니다.

MessageChannel 및 MessagePort 개체

messageChannel을 생성하는 동안 내부적으로 두 개의 포트를 생성하여 데이터를 전송하고 다른 브라우징 컨텍스트로 전달합니다.

  • postMessage() − 메시지 던지기 채널 게시

  • start() − 데이터를 보냅니다.

  • close() − 포트를 닫습니다.

이 시나리오에서는 하나의 iframe에서 다른 iframe으로 데이터를 전송합니다. 여기서 우리는 함수에서 데이터를 호출하고 데이터를 DOM에 전달합니다.

var loadHandler = function() {
   var mc, portMessageHandler;
   mc = new MessageChannel();
   window.parent.postMessage('documentAHasLoaded','http://foo.example',[mc.port2]);
   
   portMessageHandler = function(portMsgEvent) {
      alert( portMsgEvent.data );
   }
   
   mc.port1.addEventListener('message', portMessageHandler, false);
   mc.port1.start();
}
window.addEventListener('DOMContentLoaded', loadHandler, false);

위 코드에서는 포트 2에서 데이터를 가져 오므로 이제 데이터를 두 번째 iframe으로 전달합니다.

var loadHandler = function() {
   var iframes, messageHandler;
   iframes = window.frames;
   
   messageHandler = function(messageEvent) {
      
      if( messageEvent.ports.length > 0 ) {
         
         // transfer the port to iframe[1]
         iframes[1].postMessage('portopen','http://foo.example',messageEvent.ports);
      }
   }
   window.addEventListener('message',messageHandler,false);
}
window.addEventListener('DOMContentLoaded',loadHandler,false);

이제 두 번째 문서는 portMsgHandler 함수를 사용하여 데이터를 처리합니다.

var loadHandler() {
   
   // Define our message handler function
   var messageHandler = function(messageEvent) {
   
      // Our form submission handler
      
      var formHandler = function() {
         var msg = 'add <[email protected]> to game circle.';
         messageEvent.ports[0].postMessage(msg);
      }
      document.forms[0].addEventListener('submit',formHandler,false);
   }
   window.addEventListener('message',messageHandler,false);
}
window.addEventListener('DOMContentLoaded',loadHandler,false);

Cross-origin resource sharing (CORS) 웹 브라우저에서 다른 도메인의 제한된 리소스를 허용하는 메커니즘입니다.

html5 데모 섹션에서 HTML5 동영상 플레이어 를 클릭한다고 가정 해 보겠습니다 . 카메라 권한을 요청합니다. 사용자가 권한을 허용하면 카메라 만 열리거나 웹 응용 프로그램 용 카메라가 열리지 않습니다.

CORS 요청하기

여기서 Chrome, Firefox, Opera 및 Safari는 모두 XMLHttprequest2 개체를 사용하고 Internet Explorer는 유사한 XDomainRequest 개체 인 개체를 사용합니다.

function createCORSRequest(method, url) {
   var xhr = new XMLHttpRequest();
   
   if ("withCredentials" in xhr) {
      
      // Check if the XMLHttpRequest object has a "withCredentials" property.
      // "withCredentials" only exists on XMLHTTPRequest2 objects.
      xhr.open(method, url, true);
   } else if (typeof XDomainRequest != "undefined") {
      
      // Otherwise, check if XDomainRequest.
      // XDomainRequest only exists in IE, and is IE's way of making CORS requests.
      xhr = new XDomainRequest();
      xhr.open(method, url);
   } else {
      
      // Otherwise, CORS is not supported by the browser.
      xhr = null;
   }
   return xhr;
}

var xhr = createCORSRequest('GET', url);

if (!xhr) {
   throw new Error('CORS not supported');
}

CORS의 이벤트 핸들

Sr. 아니. 이벤트 핸들러 및 설명
1

onloadstart

요청을 시작합니다.

2

onprogress

데이터를로드하고 데이터를 보냅니다.

onabort

요청 중단

4

onerror

요청이 실패했습니다

5

onload

성공적으로로드 요청

6

ontimeout

요청이 완료되기 전에 시간 초과가 발생했습니다.

7

onloadend

요청이 성공하거나 실패한 경우

onload 또는 onerror 이벤트의 예

xhr.onload = function() {
   var responseText = xhr.responseText;
   
   // process the response.
   console.log(responseText);
};

xhr.onerror = function() {
   console.log('There was an error!');
};

핸들러가있는 CORS의 예

아래 예제는 makeCorsRequest () 및 onload 핸들러의 예제를 보여줍니다.

// Create the XHR object.
function createCORSRequest(method, url) {
   var xhr = new XMLHttpRequest();
   
   if ("withCredentials" in xhr) {
      
      // XHR for Chrome/Firefox/Opera/Safari.
      xhr.open(method, url, true);
   } else if (typeof XDomainRequest != "undefined") {
      
      // XDomainRequest for IE.
      xhr = new XDomainRequest();
      xhr.open(method, url);
   } else {
      
      // CORS not supported.
      xhr = null;
   }
   return xhr;
}

// Helper method to parse the title tag from the response.
function getTitle(text) {
   return text.match('<title>(.*)?</title>')[1];
}

// Make the actual CORS request.
function makeCorsRequest() {
   
   // All HTML5 Rocks properties support CORS.
   var url = 'http://www.tutorialspoint.com';
   
   var xhr = createCORSRequest('GET', url);
   
   if (!xhr) {
      alert('CORS not supported');
      return;
   }
   
   // Response handlers.
   xhr.onload = function() {
      var text = xhr.responseText;
      var title = getTitle(text);
      alert('Response from CORS request to ' + url + ': ' + title);
   };
   
   xhr.onerror = function() {
      alert('Woops, there was an error making the request.');
   };
   xhr.send();
}

W3C (World Wide Web Consortium)에서 소개 한 Web RTC. 이는 음성 통화, 화상 채팅 및 P2P 파일 공유를위한 브라우저 간 애플리케이션을 지원합니다.

시험 해보고 싶다면? Chrome, Opera 및 Firefox에서 웹 RTC를 사용할 수 있습니다. 시작하기 좋은 곳은 여기에 있는 간단한 화상 채팅 응용 프로그램 입니다. Web RTC는 아래와 같이 세 가지 API를 구현합니다.

  • MediaStream − 사용자의 카메라와 마이크에 액세스합니다.

  • RTCPeerConnection − 음성 또는 영상 통화 시설에 액세스하십시오.

  • RTCDataChannel − P2P 통신에 액세스합니다.

MediaStream

MediaStream은 동기화 된 미디어 스트림을 나타냅니다. 예를 들어 HTML5 데모 섹션에서 HTML5 비디오 플레이어를 클릭하거나 여기를 클릭 하십시오 .

위의 예에는 stream.getAudioTracks () 및 stream.VideoTracks ()가 포함되어 있습니다. 오디오 트랙이 없으면 빈 배열을 반환하고 비디오 스트림을 확인합니다. 웹캠이 연결된 경우 stream.getVideoTracks ()는 웹캠의 스트림을 나타내는 하나의 MediaStreamTrack 배열을 반환합니다. 간단한 예는 채팅 애플리케이션이며, 채팅 애플리케이션은 웹 카메라, 후면 카메라, 마이크에서 스트림을 가져옵니다.

MediaStream의 샘플 코드

function gotStream(stream) {
   window.AudioContext = window.AudioContext || window.webkitAudioContext;
   var audioContext = new AudioContext();
   
   // Create an AudioNode from the stream
   var mediaStreamSource = audioContext.createMediaStreamSource(stream);
   
   // Connect it to destination to hear yourself
   // or any other node for processing!
   mediaStreamSource.connect(audioContext.destination);
}
navigator.getUserMedia({audio:true}, gotStream);

화면 캡처

mediaStreamSource를 사용하는 Chrome 브라우저에서도 가능하며 HTTPS가 필요합니다. 이 기능은 Opera에서 아직 사용할 수 없습니다. 샘플 데모는 여기 에서 사용할 수 있습니다.

세션 제어, 네트워크 및 미디어 정보

웹 RTC는 브라우저 간의 P2P 통신이 필요했습니다. 이 메커니즘에는 신호, 네트워크 정보, 세션 제어 및 미디어 정보가 필요했습니다. 웹 개발자는 SIP 또는 XMPP 또는 양방향 통신과 같은 브라우저 간 통신을 위해 다른 메커니즘을 선택할 수 있습니다. XHR의 샘플 예는 여기에 있습니다 .

createSignalingChannel ()의 샘플 코드

var signalingChannel = createSignalingChannel();
var pc;
var configuration = ...;

// run start(true) to initiate a call
function start(isCaller) {
   pc = new RTCPeerConnection(configuration);
   
   // send any ice candidates to the other peer
   pc.onicecandidate = function (evt) {
      signalingChannel.send(JSON.stringify({ "candidate": evt.candidate }));
   };
   
   // once remote stream arrives, show it in the remote video element
   pc.onaddstream = function (evt) {
      remoteView.src = URL.createObjectURL(evt.stream);
   };
   
   // get the local stream, show it in the local video element and send it
   navigator.getUserMedia({ "audio": true, "video": true }, function (stream) {
      selfView.src = URL.createObjectURL(stream);
      pc.addStream(stream);
      
      if (isCaller)
         pc.createOffer(gotDescription);
      
      else
         pc.createAnswer(pc.remoteDescription, gotDescription);
         
         function gotDescription(desc) {
            pc.setLocalDescription(desc);
            signalingChannel.send(JSON.stringify({ "sdp": desc }));
         }
      });
   }
   
   signalingChannel.onmessage = function (evt) {
      if (!pc)
         start(false);
         var signal = JSON.parse(evt.data);
      
      if (signal.sdp)
         pc.setRemoteDescription(new RTCSessionDescription(signal.sdp));
      
      else
         pc.addIceCandidate(new RTCIceCandidate(signal.candidate));
};