HTML5-クイックガイド

HTML5は、HTML 4.01、XHTML 1.0、およびXHTML1.1に代わるHTML標準の次のメジャーリビジョンです。HTML5は、ワールドワイドウェブ上でコンテンツを構造化および表示するための標準です。

HTML5は、World Wide Webコンソーシアム(W3C)とWebハイパーテキストアプリケーションテクノロジーワーキンググループ(WHATWG)の間の協力です。

新しい標準には、以前はAdobe Flash、Microsoft Silverlight、GoogleGearsなどのサードパーティのブラウザプラグインに依存していたビデオ再生やドラッグアンドドロップなどの機能が組み込まれています。

ブラウザのサポート

Apple Safari、Google Chrome、Mozilla Firefox、およびOperaの最新バージョンはすべて多くのHTML5機能をサポートしており、Internet Explorer9.0は一部のHTML5機能もサポートします。

iPhone、iPad、およびAndroidフォンにプリインストールされているモバイルWebブラウザーはすべて、HTML5を優れた方法でサポートしています。

新機能

HTML5には、最新のWebサイトの構築に役立つ多くの新しい要素と属性が導入されています。これは、HTML5で導入された最も顕著な機能のいくつかのセットです。

  • New Semantic Elements −これらは、<header>、<footer>、および<section>のようなものです。

  • Forms 2.0 − <input>タグに新しい属性が導入されたHTMLWebフォームの改善。

  • Persistent Local Storage −サードパーティのプラグインに頼らずに達成するため。

  • WebSocket −Webアプリケーション向けの次世代双方向通信技術。

  • Server-Sent Events − HTML5は、WebサーバーからWebブラウザーに流れるイベントを導入し、サーバー送信イベント(SSE)と呼ばれます。

  • Canvas −これは、JavaScriptでプログラムできる2次元の描画面をサポートします。

  • Audio & Video −サードパーティのプラグインを使用せずに、Webページにオーディオまたはビデオを埋め込むことができます。

  • Geolocation −これで、訪問者は自分の物理的な場所をWebアプリケーションと共有することを選択できます。

  • Microdata −これにより、HTML5を超えて独自の語彙を作成し、カスタムセマンティクスでWebページを拡張できます。

  • Drag and drop −同じWebページのある場所から別の場所にアイテムをドラッグアンドドロップします。

下位互換性

HTML5は、可能な限り、既存のWebブラウザーとの下位互換性があるように設計されています。その新機能は既存の機能に基づいて構築されており、古いブラウザにフォールバックコンテンツを提供できます。

数行のJavaScriptを使用して、個々のHTML5機能のサポートを検出することをお勧めします。

以前のバージョンのHTMLに慣れていない場合は、次のバージョンを使用することをお勧めします。 HTML Tutorial HTML5の機能を調べる前に。

HTML 5言語には、Webで公開されているHTML 4およびXHTML1ドキュメントと互換性のある「カスタム」HTML構文がありますが、HTML4のより難解なSGML機能とは互換性がありません。

HTML 5には、属性を引用する小文字のタグ名が必要なXHTMLと同じ構文規則がありません。属性には値があり、すべての空の要素を閉じる必要がありました。

HTML5には多くの柔軟性があり、次の機能をサポートしています-

  • 大文字のタグ名。
  • 属性の引用符はオプションです。
  • 属性値はオプションです。
  • 空の要素を閉じることはオプションです。

DOCTYPE

HTML言語はSGMLベースであり、したがってDTDへの参照が必要だったため、古いバージョンのHTMLのDOCTYPEは長くなりました。

HTML 5の作成者は、単純な構文を使用してDOCTYPEを次のように指定します。

<!DOCTYPE html>

上記の構文では大文字と小文字は区別されません。

文字コード

HTML 5の作成者は、単純な構文を使用して、次のように文字エンコードを指定できます。

<meta charset = "UTF-8">

上記の構文では大文字と小文字は区別されません。

<script>タグ

次のように、「text / javascript」の値を持つtype属性をスクリプト要素に追加するのが一般的な方法です。

<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 −このタグを使用して、キャプションをグラフィックやビデオなどの埋め込みコンテンツと関連付けることができます。

HTML5ドキュメントのマークアップは次のようになります-

<!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属性は大文字と小文字を区別せず、すべて大文字または大文字と小文字を組み合わせて記述できますが、最も一般的な規則は小文字を使用することです。

標準属性

以下にリストされている属性は、ほとんどすべてのHTML5タグでサポートされています。

属性 オプション 関数
アクセスキー ユーザー定義の 要素にアクセスするためのキーボードショートカットを指定します。
整列 右、左、中央 タグを水平方向に配置します
バックグラウンド URL 要素の後ろに背景画像を配置します
bgcolor 数値、16進数、RGB値 要素の後ろに背景色を配置します
クラス ユーザー定義の カスケードスタイルシートで使用する要素を分類します。
contenteditable 真/偽 ユーザーが要素のコンテンツを編集できるかどうかを指定します。
コンテキストメニュー メニューID 要素のコンテキストメニューを指定します。
データ-XXXX ユーザー定義の カスタム属性。HTMLドキュメントの作成者は、独自の属性を定義できます。「data-」で始まる必要があります。
ドラッグ可能 true、false、auto ユーザーが要素をドラッグできるかどうかを指定します。
高さ 数値 テーブル、画像、またはテーブルセルの高さを指定します。
隠された 隠された 要素を表示するかどうかを指定します。
id ユーザー定義の カスケードスタイルシートで使用する要素に名前を付けます。
項目 要素のリスト 要素をグループ化するために使用されます。
itemprop アイテムのリスト アイテムをグループ化するために使用されます。
スペルチェック 真/偽 要素のスペルまたは文法をチェックする必要があるかどうかを指定します。
スタイル CSSスタイルシート 要素のインラインスタイルを指定します。
件名 ユーザー定義ID 要素の対応するアイテムを指定します。
tabindex タブ番号 要素のタブ順序を指定します。
題名 ユーザー定義の 要素の「ポップアップ」タイトル。
valign 上、中、下 HTML要素内のタグを垂直方向に配置します。
数値 テーブル、画像、またはテーブルセルの幅を指定します。

HTML5タグと関連する属性の完全なリストについては、当社への参照を確認してくださいHTML5のタグを。

カスタム属性

HTML 5で導入されている新機能は、カスタムデータ属性の追加です。

カスタムデータ属性はで始まります data-要件に基づいて名前が付けられます。これが簡単な例です-

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

上記のコードは、datasubjectdata-levelという2つのカスタム属性を持つ完全に有効なHTML5になります。これらの属性の値は、標準の属性の場合と同様の方法でJavaScriptAPIまたはCSSを使用して取得できます。

ユーザーがWebサイトにアクセスすると、テキスト、画像、リンクをクリックしたり、定義された要素にカーソルを合わせたりするなど、さまざまなアクティビティを実行します。これらはJavaScriptが呼び出すものの例です events

イベントハンドラーはJavascriptまたはVBscriptで記述でき、これらのイベントハンドラーをイベントタグ属性の値として指定できます。HTML5仕様では、以下に示すさまざまなイベント属性が定義されています。

次の一連の属性を使用して、 javascript または vbscript HTML5要素に対して発生するイベントがある場合、値として指定されたコード。

以降の章でこれらの要素について詳しく説明しながら、要素固有のイベントについて説明します。

属性 説明
オフライン 脚本 ドキュメントがオフラインになるとトリガーされます
onabort 脚本 アボートイベントのトリガー
onafterprint 脚本 ドキュメントが印刷された後にトリガーされます
onbeforeonload 脚本 ドキュメントが読み込まれる前にトリガーします
onbeforeprint 脚本 ドキュメントが印刷される前にトリガーします
onblur 脚本 ウィンドウがフォーカスを失ったときにトリガーされます
oncanplay 脚本 メディアが再生を開始できるときにトリガーしますが、バッファリングのために停止する必要がある場合があります
oncanplaythrough 脚本 バッファリングのために停止することなく、メディアを最後まで再生できる場合にトリガーします
onchange 脚本 要素が変更されたときにトリガーされます
onclick 脚本 マウスクリックでトリガー
oncontextmenu 脚本 コンテキストメニューがトリガーされるとトリガーされます
ondblclick 脚本 マウスのダブルクリックでトリガー
オンドラッグ 脚本 要素がドラッグされるとトリガーされます
ondragend 脚本 ドラッグ操作の終了時にトリガーします
ondragenter 脚本 要素が有効なドロップターゲットにドラッグされたときにトリガーされます
ondragleave 脚本 要素が有効なドロップターゲットを離れるとトリガーされます
オンドラッグオーバー 脚本 要素が有効なドロップターゲット上にドラッグされているときにトリガーされます
ondragstart 脚本 ドラッグ操作の開始時にトリガーされます
オンドロップ 脚本 ドラッグされた要素がドロップされているときにトリガーされます
ondurationchange 脚本 メディアの長さが変更されるとトリガーされます
空にされた 脚本 メディアリソース要素が突然空になったときにトリガーされます。
onended 脚本 メディアが終わりに達したときにトリガーします
onerror 脚本 エラーが発生するとトリガーされます
onfocus 脚本 ウィンドウがフォーカスを取得するとトリガーされます
onformchange 脚本 フォームが変更されたときにトリガーされます
onforminput 脚本 フォームがユーザー入力を取得するとトリガーされます
onhaschange 脚本 ドキュメントが変更されたときにトリガーされます
oninput 脚本 要素がユーザー入力を取得するとトリガーされます
oninvalid 脚本 要素が無効な場合にトリガーします
オンキーダウン 脚本 キーが押されたときにトリガーされます
onkeypress 脚本 キーを押して放すとトリガーされます
onkeyup 脚本 キーが離されるとトリガーされます
オンロード 脚本 ドキュメントが読み込まれるとトリガーされます
onloadeddata 脚本 メディアデータがロードされるとトリガーされます
onloadedmetadata 脚本 メディア要素の期間およびその他のメディアデータが読み込まれるとトリガーされます
onloadstart 脚本 ブラウザがメディアデータの読み込みを開始するとトリガーされます
onmessage 脚本 メッセージがトリガーされるとトリガーされます
onmousedown 脚本 マウスボタンが押されたときにトリガーされます
onmousemove 脚本 マウスポインタが移動するとトリガーされます
onmouseout 脚本 マウスポインタが要素の外に移動するとトリガーされます
onmouseover 脚本 マウスポインタが要素上を移動するとトリガーされます
onmouseup 脚本 マウスボタンを離すとトリガーされます
オンマウスホイール 脚本 マウスホイールが回転しているときにトリガーされます
オンラインオフライン 脚本 ドキュメントがオフラインになるとトリガーされます
オノイン 脚本 ドキュメントがオンラインになるとトリガーされます
オンライン 脚本 ドキュメントがオンラインになるとトリガーされます
onpagehide 脚本 ウィンドウが非表示になるとトリガーされます
onpageshow 脚本 ウィンドウが表示されるとトリガーされます
一時停止 脚本 メディアデータが一時停止されたときにトリガーされます
オンプレイ 脚本 メディアデータの再生が開始されるタイミングをトリガーします
onplaying 脚本 メディアデータの再生が開始されるとトリガーされます
onpopstate 脚本 ウィンドウの履歴が変更されたときにトリガーされます
onprogress 脚本 ブラウザがメディアデータをフェッチしているときにトリガーされます
onratechange 脚本 メディアデータの再生速度が変更されたときにトリガーされます
onreadystatechange 脚本 準備完了状態が変化するとトリガーされます
オンレド 脚本 ドキュメントがやり直しを実行するとトリガーされます
onresize 脚本 ウィンドウのサイズが変更されるとトリガーされます
onscroll 脚本 要素のスクロールバーがスクロールされているときにトリガーされます
オンシーク 脚本 メディア要素のシーク属性が真でなくなり、シークが終了したときにトリガーされます
オンシーク 脚本 メディア要素のシーク属性がtrueであり、シークが開始されたときにトリガーされます
onselect 脚本 要素が選択されるとトリガーされます
オンストール 脚本 メディアデータのフェッチでエラーが発生したときにトリガーされます
onstorage 脚本 ドキュメントが読み込まれるとトリガーされます
onsubmit 脚本 フォームが送信されるとトリガーされます
onsuspend 脚本 ブラウザがメディアデータをフェッチしているが、メディアファイル全体がフェッチされる前に停止した場合にトリガーされます
ontimeupdate 脚本 メディアが再生位置を変更するとトリガーされます
オナンド 脚本 ドキュメントが元に戻すを実行するとトリガーされます
onunload 脚本 ユーザーがドキュメントを離れるとトリガーされます
onvolumechange 脚本 メディアが音量を変更したとき、および音量が「ミュート」に設定されているときにもトリガーされます
待っています 脚本 メディアの再生が停止したときにトリガーされますが、再開されると予想されます

Web Forms 2.0は、HTML4にあるフォーム機能の拡張機能です。HTML5のフォーム要素と属性は、HTML4よりも高度なセマンティックマークアップを提供し、HTML4で必要とされていた面倒なスクリプトやスタイリングから解放されます。

HTML4の<input>要素

HTML4入力要素は type データ型を指定する属性。HTML4は次の型を提供します-

シニア番号 タイプと説明
1

text

名目上改行のない自由形式のテキストフィールド。

2

password

機密情報用の自由形式のテキストフィールドで、名目上改行がありません。

3

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 ブラウザ。

シニア番号 タイプと説明
1 日付時刻

タイムゾーンをUTCに設定してISO8601に従ってエンコードされた日付と時刻(年、月、日、時、分、秒、小数部)。

2 日時-ローカル

ISO 8601に従ってエンコードされた日付と時刻(年、月、日、時、分、秒、小数部)。タイムゾーン情報はありません。

3 日付

ISO 8601に従ってエンコードされた日付(年、月、日)。

4

ISO8601に従ってエンコードされた年と月で構成される日付。

5 週間

ISO8601に従ってエンコードされた年と週の番号で構成される日付。

6 時間

ISO 8601に従ってエンコードされた時間(時、分、秒、小数秒)。

7

数値のみ受け付けます。step属性は精度を指定し、デフォルトは1です。

8 範囲

範囲タイプは、数値の範囲からの値を含む必要がある入力フィールドに使用されます。

9 Eメール

電子メールの値のみを受け入れます。このタイプは、電子メールアドレスを含める必要がある入力フィールドに使用されます。簡単なテキストを送信しようとすると、email @ example.com形式の電子メールアドレスのみを入力する必要があります。

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で簡単にプログラムでき、特定の1つのフォームフィールドに自動的にフォーカスします。

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は S校正可能 Vエクター Graphicsは、2DグラフィックスとグラフィカルアプリケーションをXMLで記述するための言語であり、XMLはSVGビューアによってレンダリングされます。

SVGは主に、円グラフ、X、Y座標系の2次元グラフなどのベクトルタイプの図に役立ちます。

SVGは、2003年1月W3C勧告14.になって、あなたはでSVG仕様の最新バージョンを確認することができますSVG仕様。

SVGファイルの表示

ほとんどのWebブラウザーは、PNG、GIF、およびJPGを表示できるのと同じようにSVGを表示できます。Internet Explorerユーザーは、ブラウザーでSVGを表示できるようにするために、Adobe SVGViewerをインストールする必要がある場合があります。

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>

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

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>

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

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 線と塗りの色、線の幅などの追加のスタイル情報を設定できる属性。

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

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>

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

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>

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

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>

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

HTML5-SVGグラデーション

以下は、<ellipse>タグを使用して楕円を描画し、<radialGradient>タグを使用してSVG放射状グラデーションを定義する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>

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

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>

これにより、HTML5対応の最新バージョンのFirefoxで次の結果が生成されます。

HTML5のHTML構文では、<math> ... </ math>タグを使用してMathML要素をドキュメント内で使用できます。

ほとんどのWebブラウザは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のような適切な結果が表示されない場合は、Firefox3.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>

これにより、次の結果が生成されます-

これにより、次の結果が得られます。適切な結果が表示されない場合は、Firefox3.5以降のバージョンを使用してください。

HTML5では、HTTPセッションCookieと同様に、構造化データをクライアント側に保存し、次の欠点を克服するための2つのメカニズムが導入されています。

  • CookieはすべてのHTTPリクエストに含まれているため、同じデータを送信することでWebアプリケーションの速度が低下します。

  • CookieはすべてのHTTPリクエストに含まれているため、暗号化されていないデータがインターネット経由で送信されます。

  • Cookieは約4KBのデータに制限されています。必要なデータを保存するには不十分です。

2つのストレージは session storage そして local storage そして、それらはさまざまな状況を処理するために使用されます。

ほぼすべてのブラウザの最新バージョンは、インターネットエクスプローラを含むHTML5ストレージをサポートしています。

セッションストレージ

セッションストレージは、ユーザーが単一のトランザクションを行っているシナリオのために設計されていますが、同時に異なるウィンドウで複数のトランザクションを実行することができます。

たとえば、ユーザーが同じサイトを使用して2つの異なるウィンドウで飛行機のチケットを購入したとします。サイトがCookieを使用してユーザーが購入したチケットを追跡している場合、ユーザーが両方のウィンドウでページからページへクリックすると、現在購入されているチケットが一方のウィンドウからもう一方のウィンドウに「リーク」し、ユーザーが気付かずに同じフライトのチケットを2枚購入します。

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>

これにより、次の結果が生成されます-

ローカルストレージ

ローカルストレージは、複数のウィンドウをまたがるストレージ用に設計されており、現在のセッションを超えて持続しています。特に、Webアプリケーションは、パフォーマンス上の理由から、ユーザーが作成したドキュメント全体やユーザーのメールボックスなど、メガバイト単位のユーザーデータをクライアント側に保存したい場合があります。

繰り返しになりますが、Cookieはリクエストごとに送信されるため、このケースを適切に処理しません。

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>

これにより、次の結果が生成されます-

Webストレージを削除する

機密データをローカルマシンに保存すると危険であり、セキュリティホールが残る可能性があります。

セッションストレージのデータは、セッションが終了します直後にブラウザによって削除されるだろう。

ローカルストレージ設定をクリアするには、電話する必要があります 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>

これにより、次の結果が生成されます-

Web SQLデータベースAPIは、実際にはHTML5仕様の一部ではありませんが、SQLを使用してクライアント側データベースを操作するための一連のAPIを導入する別個の仕様です。

あなたは優れたWeb開発者であると思います。その場合は間違いなく、SQLとRDBMSの概念をよく知っているはずです。それでもSQLとのセッションが必要な場合は、SQLチュートリアルを実行できます。

Web SQL Databaseは、Safari、Chrome、Operaの最新バージョンで動作します。

コアメソッド

このチュートリアルで取り上げる仕様で定義されているコアメソッドは次の3つです-

  • openDatabase −このメソッドは、既存のデータベースを使用するか、新しいデータベースを作成して、データベースオブジェクトを作成します。

  • transaction −このメソッドを使用すると、トランザクションを制御し、状況に基づいてコミットまたはロールバックを実行できます。

  • executeSql −このメソッドは、実際のSQLクエリを実行するために使用されます。

データベースを開く

OpenDatabaseメソッドの方法は、それが存在しない場合、このメソッドは、それを作成し、それがすでに存在する場合は、データベースを開くの面倒を見ます。

データベースを作成して開くには、次のコードを使用します-

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

上記の方法は、次の5つのパラメータを取りました-

  • データベース名
  • バージョンナンバー
  • テキストの説明
  • データベースのサイズ
  • 作成コールバック

最後と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操作

テーブルにエントリを作成するには、上記の例に次のように簡単な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_id そして e_log は外部変数であり、executeSqlは配列引数の各項目を「?」にマップします。

READ操作

既存のレコードを読み取るには、コールバックを使用して次のように結果をキャプチャします-

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>

これにより、次の結果が生成されます-

従来のWebアプリケーションは、Webサーバーにディスパッチされるイベントを生成します。たとえば、リンクをクリックするだけで、サーバーに新しいページが要求されます。

WebブラウザからWebサーバーに流れるイベントの種類は、クライアント送信イベントと呼ばれる場合があります。

HTML5に加えて、WHATWG Web Applications 1.0は、WebサーバーからWebブラウザーに流れるイベントを導入し、それらはサーバー送信イベント(SSE)と呼ばれます。SSEを使用すると、DOMイベントをWebサーバーから訪問者のブラウザーに継続的にプッシュできます。

イベントストリーミングアプローチは、サーバーへの永続的な接続を開き、新しい情報が利用可能になったときにクライアントにデータを送信し、継続的なポーリングの必要性を排除します。

サーバー送信イベントは、サーバーからクライアントにデータをストリーミングする方法を標準化します。

SSE用のWebアプリケーション

Webアプリケーションでサーバー送信イベントを使用するには、ドキュメントに<eventsource>要素を追加する必要があります。

ザ・ src <eventsource>要素の属性は、イベントを含むデータストリームを送信する永続的なHTTP接続を提供するURLを指している必要があります。

URLは、イベントデータの一貫した送信を処理するPHP、PERL、または任意のPythonスクリプトを指します。以下は、サーバー時間を期待するWebアプリケーションの簡単な例です。

<!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); 
}

サーバー送信イベントの処理

サーバー送信イベントを処理するようにWebアプリケーションを変更してみましょう。以下は最後の例です。

<!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イベントをテストする前に、Webブラウザーがこの概念をサポートしていることを確認することをお勧めします。

WebSocketsは、単一のソケット上で動作し、HTML 5準拠のブラウザーのJavaScriptインターフェースを介して公開される、Webアプリケーション向けの次世代の双方向通信テクノロジーです。

WebサーバーとのWebSocket接続を取得したら、を呼び出すことにより、ブラウザーからサーバーにデータを送信できます。 send() メソッド、およびによってサーバーからブラウザにデータを受信します onmessage イベントハンドラ。

以下は、新しいWebSocketオブジェクトを作成するAPIです。

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

ここで、最初の引数urlは、接続先のURLを指定します。2番目の属性であるprotocolはオプションであり、存在する場合は、接続を成功させるためにサーバーがサポートする必要のあるサブプロトコルを指定します。

WebSocket属性

以下は、WebSocketオブジェクトの属性です。上記のようにSocketオブジェクトを作成したと仮定します-

シニア番号 属性と説明
1

Socket.readyState

読み取り専用属性readyStateは、接続の状態を表します。次の値をとることができます-

  • 値0は、接続がまだ確立されていないことを示します。

  • 値1は、接続が確立され、通信が可能であることを示します。

  • 値2は、接続がクローズハンドシェイクを通過していることを示します。

  • 値3は、接続が閉じられているか、開くことができなかったことを示します。

2

Socket.bufferedAmount

読み取り専用属性bufferedAmountは、send()メソッドを使用してキューに入れられたUTF-8テキストのバイト数を表します。

WebSocketイベント

以下は、WebSocketオブジェクトに関連するイベントです。上記のようにSocketオブジェクトを作成したと仮定します-

イベント イベントハンドラー 説明
開いた Socket.onopen このイベントは、ソケット接続が確立されたときに発生します。
メッセージ Socket.onmessage このイベントは、クライアントがサーバーからデータを受信したときに発生します。
エラー Socket.onerror このイベントは、通信にエラーが発生した場合に発生します。
閉じる Socket.onclose このイベントは、接続が閉じられたときに発生します。

WebSocketメソッド

以下は、WebSocketオブジェクトに関連付けられているメソッドです。上記のようにSocketオブジェクトを作成したと仮定します-

シニア番号 方法と説明
1

Socket.send()

send(data)メソッドは、接続を使用してデータを送信します。

2

Socket.close()

close()メソッドは、既存の接続を終了するために使用されます。

WebSocketの例

WebSocketは、クライアントとサーバー間の標準の双方向TCPソケットです。ソケットはHTTP接続として開始され、HTTPハンドシェイク後にTCPソケットに「アップグレード」されます。ハンドシェイク後、どちらの側もデータを送信できます。

クライアント側のHTMLおよびJavaScriptコード

このチュートリアルを書いている時点では、WebSocket()インターフェースをサポートしているWebブラウザーはごくわずかです。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をサポートするサーバーが必要です。pywebsocketからmod_pywebsocket-xxxtar.gzをダウンロードします。これは、ApacheHTTPサーバーにWebSocket拡張機能を提供することを目的としており、次の手順に従ってインストールします。

  • ダウンロードしたファイルを解凍して解凍します。

  • 中に入る pywebsocket-x.x.x/src/ ディレクトリ。

  • $ pythonsetup.pyビルド

  • $ sudo python setup.py install

  • 次に、-によってドキュメントを読みます

    • $ pydoc mod_pywebsocket

これにより、Python環境にインストールされます。

サーバーを起動します

に移動します 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をサポートしていることを示すアラートが表示され、最後に[Run WebSocket]をクリックすると、サーバースクリプトからさようならメッセージが送信されます。

HTML5要素<canvas>は、JavaScriptを使用してグラフィックを描画するための簡単で強力な方法を提供します。グラフの描画、写真の構図の作成、または単純な(それほど単純ではない)アニメーションの作成に使用できます。

これは、2つの特定の属性のみを持つ単純な<canvas>要素です。 width そして height さらに、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、レンダリングコンテキストとその描画関数を取得するために使用されます。この関数は、コンテキストのタイプという1つのパラメーターを取ります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を使用して、InternetExplorerを介してキャンバスをサポートできます。このJavaScriptを次のように含める必要があります-

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

HTML5キャンバスの例

このチュートリアルでは、HTML5 <canvas>要素に関連する次の例について説明します。

シニア番号 例と説明
1 長方形を描く

HTML5の<canvas>要素を使用して長方形を描画する方法を学ぶ

2 パスの描画

HTML5 <canvas>要素のパスを使用してシェイプを作成する方法を学ぶ

3 線を引く

HTML5の<canvas>要素を使用して線を引く方法を学ぶ

4 ベジェを描く

HTML5 <canvas>要素を使用してベジェ曲線を描画する方法を学ぶ

5 二次の描画

HTML5の<canvas>要素を使用して2次曲線を描く方法を学ぶ

6 画像の使用

HTML5の<canvas>要素で画像を使用する方法を学ぶ

7 グラデーションを作成する

HTML5の<canvas>要素を使用してグラデーションを作成する方法を学ぶ

8 スタイルと色

HTML5の<canvas>要素を使用してスタイルと色を適用する方法を学ぶ

9 テキストとフォント

さまざまなフォントとそのサイズを使用してすばらしいテキストを描画する方法を学びます。

10 パターンと影

さまざまなパターンを描き、影を落とす方法を学びます。

11 キャンバスの状態

キャンバス上で複雑な描画を行いながら、キャンバスの状態を保存および復元する方法を学びます。

12 キャンバス翻訳

このメソッドは、キャンバスとその原点をグリッド内の別のポイントに移動するために使用されます。

13 キャンバスの回転

このメソッドは、現在の原点を中心にキャンバスを回転させるために使用されます。

14 キャンバススケーリング

この方法は、キャンバスグリッドの単位を増減するために使用されます。

15 キャンバス変換

これらの方法では、変換行列を直接変更できます。

16 キャンバス構成

この方法は、特定の領域をマスクしたり、キャンバスからセクションをクリアしたりするために使用されます。

17 キャンバスアニメーション

HTML5キャンバスとJavaScriptを使用して基本的なアニメーションを作成する方法を学びます。

HTML5の機能には、Flashを必要としないネイティブオーディオおよびビデオのサポートが含まれます。

HTML5の<audio>タグと<video>タグを使用すると、Webサイトにメディアを簡単に追加できます。設定する必要があります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ビデオタグは、コントロールのルックアンドフィールとさまざまな機能を制御するためのいくつかの属性を持つことができます-

シニア番号 属性と説明
1

autoplay

このブール属性を指定すると、データの読み込みを停止せずに、できる限りすぐにビデオの再生が自動的に開始されます。

2

autobuffer

このブール属性を指定すると、自動的に再生するように設定されていなくても、ビデオは自動的にバッファリングを開始します。

3

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, mp3 そして wav

<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オーディオタグは、コントロールのルックアンドフィールとさまざまな機能を制御するためのいくつかの属性を持つことができます-

シニア番号 属性と説明
1

autoplay

このブール属性を指定すると、データのロードを停止せずに、オーディオの再生が可能になるとすぐに自動的に開始されます。

2

autobuffer

このブール属性を指定すると、自動的に再生するように設定されていなくても、オーディオは自動的にバッファリングを開始します。

3

controls

この属性が存在する場合、ユーザーは音量、シーク、再生の一時停止/再開などのオーディオ再生を制御できます。

4

loop

このブール属性を指定すると、オーディオは最後に到達した後、自動的に最初に戻ることができます。

5

preload

この属性は、オーディオがページのロード時にロードされ、実行できる状態になることを指定します。自動再生が存在する場合は無視されます。

6

src

埋め込むオーディオのURL。これはオプションです。代わりに、ビデオブロック内の<source>要素を使用して、埋め込むビデオを指定できます。

メディアイベントの処理

HTML5オーディオおよびビデオタグは、JavaScriptを使用してコントロールのさまざまな機能を制御するためのいくつかの属性を持つことができます-

S.No. イベントと説明
1

abort

このイベントは、再生が中止されたときに生成されます。

2

canplay

このイベントは、メディアを再生できる十分なデータが利用可能になったときに生成されます。

3

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を使用すると、現在地をお気に入りのWebサイトと共有できます。JavaScriptは緯度と経度をキャプチャし、バックエンドWebサーバーに送信して、地元のお店を見つけたり、地図上に現在地を表示したりするなど、場所を意識した凝ったことを行うことができます。

現在、ほとんどのブラウザとモバイルデバイスはGeolocationAPIをサポートしています。ジオロケーションAPIは、グローバルナビゲーターオブジェクトの新しいプロパティで動作します。次のように作成できるジオロケーションオブジェクト-

var geolocation = navigator.geolocation;

ジオロケーションオブジェクトは、ウィジェットがデバイスの地理的位置に関する情報を取得できるようにするサービスオブジェクトです。

ジオロケーション手法

ジオロケーションオブジェクトは、次のメソッドを提供します-

シニア番号 方法と説明
1 getCurrentPosition()

このメソッドは、ユーザーの現在の地理的位置を取得します。

2 watchPosition()

このメソッドは、デバイスの現在の地理的位置に関する定期的な更新を取得します。

3 clearWatch()

このメソッドは、進行中のwatchPosition呼び出しをキャンセルします。

以下は、上記の方法のいずれかを使用するためのサンプルコードです-

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

ここで、showLocationとerrorHandlerは、次のセクションで説明するように実際の位置を取得し、エラーがある場合はそれを処理するために使用されるコールバックメソッドです。

ロケーションプロパティ

ジオロケーションメソッドgetCurrentPosition()およびgetPositionUsingMethodName()は、ロケーション情報を取得するコールバックメソッドを指定します。これらのメソッドは、オブジェクトと非同期に呼び出されますPosition 完全な位置情報を保存します。

ザ・ Positionオブジェクトは、デバイスの現在の地理的位置を指定します。場所は、方位と速度に関する情報とともに、地理座標のセットとして表されます。

次の表に、Positionオブジェクトのプロパティを示します。システムが値を提供できない場合のオプションのプロパティの場合、プロパティの値はnullに設定されます。

プロパティ タイプ 説明
座標 オブジェクト デバイスの地理的な場所を指定します。場所は、方位と速度に関する情報とともに、地理座標のセットとして表されます。
coords.latitude 緯度の推定値を10進角で指定します。値の範囲は[-90.00、+ 90.00]です。
coords.longitude 経度の推定値を10進角で指定します。値の範囲は[-180.00、+ 180.00]です。
coords.altitude [オプション] WGS84楕円体の上のメートル単位で高度推定値を指定します。
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オブジェクト。このオブジェクトには次の2つのプロパティがあります-

プロパティ タイプ 説明
コード エラーの数値コードが含まれています。
メッセージ ストリング 人間が読める形式のエラーの説明が含まれています。

次の表に、PositionErrorオブジェクトで返される可能性のあるエラーコードを示します。

コード 絶え間ない 説明
0 未知のエラー 不明なエラーが原因で、メソッドはデバイスの場所を取得できませんでした。
1 アクセス拒否 アプリケーションに位置情報サービスを使用する権限がないため、このメソッドはデバイスの場所を取得できませんでした。
2 POSITION_UNAVAILABLE デバイスの場所を特定できませんでした。
3 タイムアウト メソッドは、指定された最大タイムアウト間隔内に位置情報を取得できませんでした。

以下は、PositionErrorオブジェクトを利用するサンプルコードです。ここで、errorHandlerメソッドはコールバックメソッドです-

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

ポジションオプション

以下は、getCurrentPosition()メソッドの実際の構文です。

getCurrentPosition(callback, ErrorCallback, options)

ここで3番目の引数は PositionOptions デバイスの地理的位置を取得するためのオプションのセットを指定するオブジェクト。

以下は、3番目の引数として指定できるオプションです-

プロパティ タイプ 説明
enableHighAccuracy ブール値 ウィジェットが可能な限り最も正確な位置推定を受信するかどうかを指定します。デフォルトでは、これはfalseです。
タイムアウト タイムアウトプロパティは、Webアプリケーションが位置を待機するミリ秒数です。
maximumAge キャッシュされた位置情報の有効期限をミリ秒単位で指定します。

以下は、上記の方法の使用方法を示すサンプルコードです-

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

Microdataは、Webページに追加のセマンティクスを提供するための標準化された方法です。

Microdataを使用すると、独自にカスタマイズした要素を定義して、Webページにカスタムプロパティを埋め込み始めることができます。大まかに言えば、microdataは名前と値のペアのグループで構成されます。

グループは呼ばれます items、および各名前と値のペアは property。アイテムとプロパティは通常の要素で表されます。

  • アイテムを作成するには、 itemscope 属性が使用されます。

  • アイテムにプロパティを追加するには、 itemprop 属性は、アイテムの子孫の1つで使用されます。

ここには2つのアイテムがあり、それぞれにプロパティ「name」があります。

<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つのグローバル属性を導入し、データに関するマシンのコンテキストを提供します。

シニア番号 属性と説明
1

itemscope

これは、アイテムを作成するために使用されます。itemscope属性は、このページにMicrodataがあることを示すブール属性であり、ここから開始されます。

2

itemtype

この属性は、アイテムを定義し、プロパティのコンテキストを提供する有効なURLです。

3

itemid

この属性は、アイテムのグローバル識別子です。

4

itemprop

この属性は、アイテムのプロパティを定義します。

5

itemref

この属性は、アイテムの名前と値のペアを見つけるためにクロールする追加の要素のリストを提供します。

プロパティデータ型

プロパティには通常、上記の例で説明したように文字列の値がありますが、URLの値を持つこともできます。次の例には、値がURL-である1つのプロパティ "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属性を設定することにより、プロパティ自体を名前と値のペアのグループにすることもできます。

MicrodataAPIのサポート

ブラウザがHTML5microdata APIをサポートしている場合、グローバルドキュメントオブジェクトにgetItems()関数があります。ブラウザがmicrodataをサポートしていない場合、getItems()関数は未定義になります。

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

ModernizrはまだmicrodataAPIのチェックをサポートしていないため、上記のような関数を使用する必要があります。

HTML5 microdata標準には、HTMLマークアップ(主に検索エンジン用)と一連のDOM関数(主にブラウザー用)の両方が含まれています。

Webページにmicrodataマークアップを含めることができ、microdata属性を理解しない検索エンジンはそれらを無視します。ただし、DOMを介してmicrodataにアクセスまたは操作する必要がある場合は、ブラウザーがmicrodata DOMAPIをサポートしているかどうかを確認する必要があります。

Microdata語彙の定義

microdataの語彙を定義するには、機能するWebページを指す名前空間URLが必要です。たとえば、https://data-vocabulary.org/Personは、次の名前付きプロパティを持つ個人のmicrodataボキャブラリの名前空間として使用できます-

  • name −単純な文字列としての人名

  • Photo −人物の写真へのURL。

  • URL −その人が所有するウェブサイト。

約プロパティを使用すると、個人のmicrodataは次のようになります。

<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は、RichSnippetsプログラムの一部としてmicrodataをサポートしています。Googleのウェブクローラーがページを解析し、http://datavocabulary.org/Personボキャブラリーに準拠するmicrodataプロパティを見つけると、それらのプロパティを解析して、残りのページデータと一緒に保存します。

http://www.tutorialspoint.com/html5/microdata.htmを使用してRichSnippets Testing Toolを使用して、上記の例をテストできます。

ミクロのさらなる発展のために、いつでも参照することができHTML5ミクロ。

ドラッグアンドドロップ(DnD)は、マウスクリックを使用してアイテムを簡単にコピー、並べ替え、削除できる強力なユーザーインターフェイスの概念です。これにより、ユーザーはマウスボタンをクリックして要素の上に押したまま、別の場所にドラッグし、マウスボタンを離して要素をそこにドロップできます。

従来のHTML4でドラッグアンドドロップ機能を実現するには、開発者は複雑なJavaScriptプログラミングまたはjQueryなどの他のJavaScriptフレームワークを使用する必要があります。

HTML 5は、ブラウザにネイティブDnDサポートを提供するドラッグアンドドロップ(DnD)APIを考案し、コーディングをはるかに簡単にしました。

HTML 5 DnDは、Chrome、Firefox 3.5、Safari4などのすべての主要なブラウザでサポートされています。

ドラッグアンドドロップイベント

ドラッグアンドドロップ操作のさまざまな段階で発生するイベントがいくつかあります。これらのイベントは以下のとおりです-

シニア番号 イベントと説明
1

dragstart

ユーザーがオブジェクトのドラッグを開始すると発生します。

2

dragenter

ドラッグが発生しているときに、マウスが最初にターゲット要素上に移動したときに発生します。このイベントのリスナーは、この場所でのドロップが許可されているかどうかを示す必要があります。リスナーがない場合、またはリスナーが操作を実行しない場合、デフォルトではドロップは許可されません。

3

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オブジェクトに関連付けられたさまざまな属性に関して取得および設定できます。

シニア番号 DataTransfer属性とその説明
1

dataTransfer.dropEffect [ = value ]

  • 現在選択されている操作の種類を返します。

  • この属性を設定して、選択した操作を変更できます。

  • 可能な値は、none、copy、link、およびmoveです。

2

dataTransfer.effectAllowed [ = value ]

  • 許可される操作の種類を返します。

  • この属性を設定して、許可される操作を変更できます。

  • 可能な値は次のとおりです。 none, copy, copyLink, copyMove, link, linkMove, move, all そして uninitialized

3

dataTransfer.types

ドラッグスタートイベントで設定されたフォーマットをリストするDOMStringListを返します。さらに、ファイルがドラッグされている場合、タイプの1つは文字列「ファイル」になります。

4

dataTransfer.clearData ( [ format ] )

指定された形式のデータを削除します。引数を省略した場合、すべてのデータを削除します。

5

dataTransfer.setData(format, data)

指定したデータを追加します。

6

data = dataTransfer.getData(format)

指定されたデータを返します。そのようなデータがない場合は、空の文字列を返します。

7

dataTransfer.files

ドラッグされているファイルがある場合は、そのファイルリストを返します。

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の操作が必要な状況を考えてみてください。

JavaScriptは、CPU使用率が高い状況でブラウザをハングさせます。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>

次の結果が得られます-

ビッグループボタンをクリックすると、Firefoxで次の結果が表示されます-

Webワーカーとは何ですか?

上で説明した状況は、 Web Workers ユーザーインターフェイスを中断することなく、計算コストの高いすべてのタスクを実行し、通常は別々のスレッドで実行します。

Web Workersを使用すると、クリックやその他のユーザー操作に応答するスクリプトによって中断されない長時間実行スクリプトが可能になり、ページの応答性を維持するために譲歩せずに長いタスクを実行できます。

Web Workerはバックグラウンドスクリプトであり、比較的重量があり、大量に使用することを目的としていません。たとえば、4メガピクセルの画像のピクセルごとに1つのワーカーを起動することは不適切です。

スクリプトがWebワーカー内で実行されている場合、スクリプトはWebページのウィンドウオブジェクト(window.document)にアクセスできません。つまり、WebワーカーはWebページとDOMAPIに直接アクセスできません。Web WorkersはブラウザのUIをブロックできませんが、CPUサイクルを消費し、システムの応答性を低下させる可能性があります。

Webワーカーはどのように機能しますか?

Webワーカーは、ワーカーが実行するコードを含むJavaScriptファイルのURLで初期化されます。このコードは、イベントリスナーを設定し、メインページからイベントリスナーを生成したスクリプトと通信します。以下は簡単な構文です-

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

指定されたjavascriptファイルが存在する場合、ブラウザーは非同期でダウンロードされる新しいワーカースレッドを生成します。ワーカーへのパスが404エラーを返した場合、ワーカーはサイレントに失敗します。

アプリケーションに複数のサポートJavaScriptファイルがある場合は、それらをインポートできます importScripts() 次のように、ファイル名をコンマで区切った引数として受け取るメソッド-

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

Web Workerが生成されると、WebWorkerとその親ページの間の通信は postMessage()方法。ブラウザ/バージョンに応じて、postMessage()は文字列またはJSONオブジェクトのいずれかを単一の引数として受け入れることができます。

Web Workerによって渡されたメッセージには、 onmessageメインページのイベント。それでは、WebWorkerを使用してbigLoopの例を書いてみましょう。以下は、ループを実行し、変数の最終値を返すWebワーカーを生成するメインページ(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);

これにより、次の結果が生成されます-

Webワーカーの停止

Webワーカーは自分で停止することはありませんが、Webワーカーを開始したページで、 terminate() 方法。

worker.terminate();

終了したWebWorkerは、メッセージに応答したり、追加の計算を実行したりしなくなります。ワーカーを再起動することはできません。代わりに、同じURLを使用して新しいワーカーを作成できます。

エラーの処理

以下に、コンソールにエラーをログに記録するWeb WorkerJavaScriptファイルのエラー処理関数の例を示します。エラー処理コードを使用すると、上記の例は次のようになります。

<!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>

ブラウザサポートの確認

以下は、ブラウザーで使用可能なWebワーカー機能のサポートを検出するための構文です。

<!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は、Web SQLデータベースが非推奨のローカルストレージ仕様であると発表したため、Web開発者はこのテクノロジを使用しないでください。indexeddbは、Web SQLデータベースの代替であり、古いテクノロジーよりも効果的です。

特徴

  • キーペア値を格納します
  • リレーショナルデータベースではありません
  • IndexedDBAPIはほとんど非同期です
  • 構造化されたクエリ言語ではありません
  • 同じドメインからのデータへのアクセスをサポートしています

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>

次の出力が生成されます-

Webメッセージングは​​、サーバーからクライアントブラウザにリアルタイムメッセージを送信する機能です。異なるドメイン、プロトコル、またはポートでのクロスドメイン通信の問題を無効にします

たとえば、ページからiframeまたは音声に配置された広告コンテナにデータを送信したい場合、このシナリオでは、ブラウザはセキュリティ例外をスローします。Webメッセージングを使用すると、データをメッセージイベントとして渡すことができます。

メッセージイベント

メッセージイベントは、クロスドキュメントメッセージング、チャネルメッセージング、サーバー送信イベント、およびWebソケットを起動します。メッセージイベントインターフェイスで説明されています。

属性

シニア番号 属性と説明
1

data

文字列データが含まれています

2

origin

ドメイン名とポートが含まれています

3

lastEventId

現在のメッセージイベントの一意の識別子が含まれます。

4

source

元のドキュメントのウィンドウへの参照が含まれています

5

ports

任意のメッセージポートによって送信されるデータが含まれます

クロスドキュメントメッセージの送信

クロスドキュメントメッセージを送信する前に、新しいiframeまたは新しいウィンドウを作成して新しいWebブラウジングコンテキストを作成する必要があります。postMessage()を使用してデータを送信でき、2つの引数があります。それらは次のようになります-

  • 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の作成中に、データを送信して別のブラウジングコンテキストに転送するための2つのポートを内部的に作成します。

  • 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からデータを取得し、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);

次に、2番目のドキュメントが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) Webブラウザの別のドメインから制限されたリソースを許可するメカニズムです。

たとえば、html5デモセクションでHTML5-ビデオプレーヤーをクリックするとします。カメラの許可を求めます。ユーザーが許可を許可した場合、それだけがカメラを開きます。そうでない場合、Webアプリケーション用にカメラを開きません。

CORSリクエストを行う

ここで、Chrome、Firefox、Opera、SafariはすべてXMLHttprequest2オブジェクトを使用し、InternetExplorerは同様の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のイベントハンドル

シニア番号 イベントハンドラーと説明
1

onloadstart

リクエストを開始します

2

onprogress

データをロードして送信します

3

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();
}

World Wide Web Consortium(W3C)によって導入されたWebRTC。これは、音声通話、ビデオチャット、およびP2Pファイル共有用のブラウザーツーブラウザーアプリケーションをサポートします。

試してみたい場合は?Chrome、Opera、Firefoxで利用可能なWebRTC。開始するのに適した場所は、ここにある簡単なビデオチャットアプリケーションです。Web RTCは、以下に示すように3つのAPIを実装します-

  • MediaStream −ユーザーのカメラとマイクにアクセスできます。

  • RTCPeerConnection −オーディオまたはビデオ通話機能にアクセスできます。

  • RTCDataChannel −ピアツーピア通信へのアクセスを取得します。

MediaStream

MediaStreamは、メディアの同期ストリームを表します。たとえば、HTML5デモセクションでHTML5ビデオプレーヤーをクリックするか、ここをクリックしてください。

上記の例には、stream.getAudioTracks()とstream.VideoTracks()が含まれています。オーディオトラックがない場合は、空の配列を返し、ビデオストリームをチェックします。ウェブカメラが接続されている場合、stream.getVideoTracks()は、ウェブカメラからのストリームを表す1つのMediaStreamTrackの配列を返します。簡単な例はチャットアプリケーションです。チャットアプリケーションはWebカメラ、リアカメラ、マイクからストリームを取得します。

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ではまだ利用できません。サンプルデモはこちらから入手できます

セッション制御、ネットワークおよびメディア情報

Web RTCでは、ブラウザー間のピアツーピア通信が必要でした。このメカニズムには、シグナリング、ネットワーク情報、セッション制御、およびメディア情報が必要でした。Web開発者は、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));
};