100
HTML5 Introduction Presentation @ OSC 2010 Hokkaido by Tomoya Asai (aka. dynamis)

HTML5 Introduction

Embed Size (px)

DESCRIPTION

20100626 OSC Hokkaido での講演スライド end と書いたページ以降に講演で使わなかったおまけスライドや参照 URL 集があります

Citation preview

Page 1: HTML5 Introduction

HTML5 IntroductionPresentation @ OSC 2010 Hokkaidoby Tomoya Asai (aka. dynamis)

Page 2: HTML5 Introduction

about:me

浅井 智也 =̃ dynamis (でゅなみす)

Mozilla Products & Technology Evangelist

slides: http://r.dynamis.jp/presen

mail: dynamis mozilla-japan.org

twitter: @dynamitter

@

Page 3: HTML5 Introduction

FIFA World Cup 2010決勝進出おめでとう!

Page 4: HTML5 Introduction

決勝進出おめでとう!

HTML5&CSS3 ブブゼラ http://people.opera.com/danield/html5/vuvuzela/

Page 5: HTML5 Introduction

"HTML5" とは?

Why? What? When?

今使える技術、次に来る技術

Design, Platform, Multimedia

HTML5 の彼方に

Agenda:

Page 6: HTML5 Introduction

StatisticsShare and Active Users

Page 7: HTML5 Introduction
Page 8: HTML5 Introduction

2002/01

2009/07

Browser MarketShare Graph by AXIIShttp://www.axiis.org/examples/BrowserMarketShare.html

Page 9: HTML5 Introduction

Browser MarketShare Graph by AXIIShttp://www.axiis.org/examples/BrowserMarketShare.html

Page 10: HTML5 Introduction

Opera2%

Safari5%

Chrome7%

Firefox25%

Internet Explorer60%

世界のブラウザシェア by NetApps (2010/04)

Page 11: HTML5 Introduction

Opera2%

Safari5%

Chrome7%

Firefox25%

Internet Explorer60%

世界のブラウザシェア by NetApps (2010/04)

Stats by NetApplicationshttp://marketshare.hitslink.com/

Page 14: HTML5 Introduction

"HTML5"? (・・)?

Page 15: HTML5 Introduction

Why HTML5Birth of HTML5...

Page 16: HTML5 Introduction

Why HTML5Birth of HTML5...

Page 17: HTML5 Introduction

2004: Web 2.0

Google Suggest, Maps, Gmail

Ajax による実用サービス

Web の可能性が再評価

Page 18: HTML5 Introduction

Browser = Web Viewer

Page 19: HTML5 Introduction

Browser = Web Platform

Page 20: HTML5 Introduction

Problems are...

ブラウザ間の互換性...

不安定、低機能、低速...

XHTML 2.0 なども普及せず...

Page 21: HTML5 Introduction

5 years later...

Web アプリの為の HTML を

後方互換性のある形で進化を

WHATWG を設立して仕様策定

Page 22: HTML5 Introduction

HTML5

次世代 Web のための HTML

Web アプリを書きやすく

相互運用性も確保できる仕様

Page 23: HTML5 Introduction

This specification evolves HTML

and its related APIs to ease the

authoring of Web-based applications.

http://whatwg.org/html5 - Abstract より

Page 24: HTML5 Introduction

http://whatwg.org/html5 - Abstract より

この仕様では Web アプリケーションを記述しやすくするため

HTML と関連 API を進化させる

Page 25: HTML5 Introduction

What is HTML5?Range of HTML5...

Page 26: HTML5 Introduction

What is HTML5?Range of HTML5...

Page 27: HTML5 Introduction

"HTML5" ?

Video? Canvas? SVG? CSS3?

タグの仕様? API の仕様?

プラグインが不要になる?

Page 29: HTML5 Introduction

HTML5 の定義

仕様書に書いてあります

ベンダーの宣伝はウソだらけ

メディアも気にせず間違い多い

ref. http://whatwg.org/html5 - 1.1 Is this HTML5?

Page 30: HTML5 Introduction

WHATWG の HTML5 仕様書に基づきます

HTML5

Canvas 2D Graphics ContextMicrodata

Microdata vocabulariesCross-document messaging

Channel messaging

HTML5 Parser

HTML5

HTML5 Parser

HTML5 Web Messaging

HTML5 Microdata

HTML Canvas 2D Context

Drag & Drop APIOffline Events

Event model & APIsHTML5 Forms

Multimedia Elements

Drag & Drop APIOffline Events

Event model & APIsHTML5 Forms

Multimedia ElementsSemantic Elements Semantic Elements

Page 31: HTML5 Introduction

WHATWG の仕様書にも HTML5 範囲外のものが入ってます

Next Generation of HTML

HTML5

Canvas 2D Graphics ContextMicrodata

Microdata vocabulariesCross-document messaging

Channel messaging

Elements, Events, APIs

device elementping attribute

timed track modelconverting HTML to Atom

HTML5Elements, Events, APIs

HTML5 Web Messaging

HTML5 Microdata

HTML Canvas 2D Context

Page 32: HTML5 Introduction

Next Generation of HTML

HTML5

その他いろいろ話題ですが HTML5 じゃありません

Canvas 2D Graphics ContextMicrodata

Microdata vocabularies

HTML5

Cross-document messagingChannel messaging HTML5 Web Messaging

HTML5 Microdata

HTML Canvas 2D Context

Web WorkersThe WebSocket protocol

SVGMathML

Web Storage

The WebSockets APIServer-Sent Events

Geolocation APIXMLHttpRequest Level 2

Indexed Database API<device> ping=""

timed track HTML→Atom

Elements, Events, APIs Elements, Events, APIs

Page 34: HTML5 Introduction

どこまで HTML5?

Web WorkersWeb Storage

The WebSockets API

Server-Sent Events

Geolocation API

XMLHttpRequest Level 2

Canvas 2D

Forms

File API

SVG

Drag & Drop APIIndexed Database API

Microdata

Cross-document MessagingWebGL

WebFonts

Event Listener

WebM (VP8) CodecCSS3 TransitionsECMAScript 5th

Offline Events

HTML5 Markup

CSS3 Selectors

XPath

WHATWG 仕様書の定義によるCanvas はタグの定義だけが HTML5

Page 35: HTML5 Introduction

独自実装ばかりのデモはAppleHTML とか

GoogleHTML とでも

Page 36: HTML5 Introduction

When HTML5?Practical HTML5...

Page 37: HTML5 Introduction

Now.

Page 38: HTML5 Introduction

サポート状況

仕様書に書いてあります

Acid3 などは無意味です

公開資料末尾の付録参照

ベンダー発表のサポート状況は注意して見ること自社のブラウザでサポートした機能に絞ったチェックリスト古い仕様や独自実装やバグだらけの実装でもサポートと主張

Page 39: HTML5 Introduction

後方互換は?

Video などは Fallback 簡単

Canvas も SVG もライブラリで

公開資料末尾の付録参照

IE6 でも Canvas 動作するライブラリあります個人的には uupaa さんの uuCancas.js がオススメ

SVG の後方互換ライブラリも鋭意開発中とのことです

Page 40: HTML5 Introduction

使えるものから使いましょう。

仕様の中でサポートされているものから使うこれまでの Web 開発でやってきた事と同じです

ブラウザ対応状況などは資料末尾の Reference 参照

Page 41: HTML5 Introduction

Current & Coming Tech

Technology Status

Page 42: HTML5 Introduction

HTML5 だけじゃ物足りないので他も含めます

Page 43: HTML5 Introduction

Web DesignCSS, Image, Fonts...

Page 44: HTML5 Introduction

CSS Gradients

Firefox3.6~ http://hacks.mozilla.org/2009/11/css-gradients-firefox-36/CSS ボタン生成ツールも: http://css-tricks.com/examples/ButtonMaker/

Page 45: HTML5 Introduction

CSS Gradients線形 (linear) と放射状 (radial) の2種類

linear-gradient(top, black 0%, white 100%)

radial-gradient(circle, yellow, green)

繰り返し形式もサポート

repeating-linear-gradient(red 10px, blue 10px)

CSS3 Images で画像の一種として定義

Draft なので -webkit-, -moz- prefix が必要

Firefox 3.6 では background に対してのみ

WebKit の構文は古い独自仕様なので注意

Firefox3.6~ http://dev.w3.org/csswg/css3-images/#gradients-

Page 46: HTML5 Introduction

http://people.mozilla.org/~blizzard/2009-11-gradient-button/sample.html

<style>.gradationbutton { display: block; /* a タグをボックス要素に */ font: bold 138.5% Helvetica,Arial,sans-serif; text-align: center; text-decoration: none; /* リンクの下線解除 */ color: #ffffff; /* 白抜き文字 */ text-shadow: -1px -1px 2px #777777; /* エンボス */ padding: 10px; border: 1px solid #659635; -moz-border-radius: 10px; border-radius: 10px; /* 角を丸める */ background: #99ca28; /* 非サポートブラウザ向け Fallback */ background: -moz-linear-gradient(top, #CFE782 0%, #9BCB2A 2%, #5DA331 97%, #659635 100%);}.info { font-size: 81%; font-weight: normal;}</style><p style="width: 300px;"> <a class="gradationbutton" href="http://hacks.mozilla.org"> <span>hacks.mozilla.org</span><br/> <span class="info">HTML5 の最新情報はこちら!</span> </a></p>

Page 47: HTML5 Introduction

Web Fonts

Firefox3.5~ http://www.alistapart.com/articles/cssatten

Page 48: HTML5 Introduction

Web Fonts

Japanese Web Fonts Service by Seesaa http://decomoji.jp/

Page 49: HTML5 Introduction

Web Fonts

CSS3 Web Fonts

@font-face でダウンロードフォントを定義

@font-face { font-family: Koburina; src url(Koburina.woff) format("woff"); }

Firefox 3.5 で OpenType, TrueType をサポート

Firefox 3.6 や IE9 などは WOFF もサポート

Web Open Font Format

フォントベンダと共に作った新フォント形式

グリフ部分のデータは圧縮して小さく

Firefox3.5~ https://developer.mozilla.org/ja/CSS/@font-face

Page 50: HTML5 Introduction

sample css style rules

/* Internet Explorer 8 以前用フォント設定 (最初に) */@font-face { font-family: Sawarabi; src: url(Sawarabi.eot) /* format() 非サポート */;}/* 他のブラウザ向けフォント設定 */@font-face { font-family: Sawarabi; src: url(Sawarabi.otf) format("opentype");}/* Firefox 3.6 以降などには WOFF を */@font-face { font-family: Sawarabi; src: url(Sawarabi.woff) format("woff");}body { font-family: Sawarabi, sans-serif; }

Firefox3.5~ http://hacks.mozilla.org/2009/06/beautiful-fonts-with-font-face/

Page 51: HTML5 Introduction

Application PlatformJS APIs for Web Apps...

Page 52: HTML5 Introduction

WebSockets

photo by 5500 http://www.flickr.com/photos/5500/303849123/

Page 53: HTML5 Introduction

WebSockets

シンプルなテキスト送受信プロトコル

バイナリデータや多重化などの機能はない

JavaScript API も極めて単純

データの送信は send メソッド

open, error, close, message イベントで処理

まだまだ仕様策定段階なので要注意

Firefox は 2009/04 からパッチを用意し仕様変更に随時追従しながら仕様の問題を指摘

Firefox 4, Chrome 6 が現仕様サポート予定https://dev.mozilla.jp/hacksmozillaorg/websockets-in-firefox/

Page 54: HTML5 Introduction

Web Sockets API 使用コード例// WebSocket の接続を開始var socket = new WebSocket(url /* ,protocol */);

// on*** イベントハンドラを設定socket.onopen = function(event) { // send メソッドでサーバにテキストを送信 socket.send("Hello, WebSocket Server!");}// onmessage イベントハンドラでサーバからテキスト受信socket.onmessage = function(event) { alert("data from server: "+event.data);}

socket.onerror = function(e) { alert("Error!"); }socket.onclose = function(e) { alert("Closed."); }

Page 55: HTML5 Introduction

File API

photo by californiaAmy http://www.flickr.com/photos/amyandthomas/3865411819/

Page 56: HTML5 Introduction

File API

ローカルファイルの読み込み専用 API

Mozilla が中心に標準化、Firefox 3.6 で実装

書き込みは File API: Writer という別仕様

<input type="file"> 経由でのアクセスが一番基本

value は初期値設定や JS から文字列指定不可

XMLHttpRequest や Workers などでも利用可

Drag & Drop API との組み合わせも可能

Blob, File, FileReader などのインターフェイス

Firefox3.6~ https://developer.mozilla.org/en/Using_files_from_web_applications

Page 57: HTML5 Introduction

https://developer.mozilla.org/en/Using_files_from_web_applications

<input type="file" id="fileInput" multiple="true"/><script><!--var fileInput = document.getElementById("fileInput");  fileInput.addEventListener("change", handleFiles);

// onchange イベントハンドラfunction handleFiles() {    var fileList = this.files;     for (var i = 0; i < files.length; i++) { alert("ファイル名: " + files[i].name); alert("内容: " + files[i].getAsText("UTF-8")); } // close や lock は不要 (try-catch すれば OK)}--></script>

Page 58: HTML5 Introduction

Drag & Drop API

Firefox3.6~ http://r.dynamis.jp/fontdropdemo

Page 59: HTML5 Introduction

The drag-and-drop API is horrible,

but it has one thing going for it: IE6

implements it, as do Safari and Firefox.

Ian Hickson の言葉 http://twitter.com/Hixie/status/4075253361

Page 60: HTML5 Introduction

Drag & Drop APIHTML5 の Drag & Drop API

IE5, Firefox 3.5, Safar 4 からサポート

IE の (ホント酷い) 先行実装に合わせた仕様

addEventListener("drop", function(event) { ... },true)

dragstart, dragover, dragend などのイベント

ローカルファイルのドロップは File API

File API と組み合わせは Firefox 3.6 から

event.dataTransfer.files でファイルを受け取る

あとは File API で自由に読み取る

Firefox3.5~ https://developer.mozilla.org/Ja/DragDrop/Drag_and_Drop

Page 61: HTML5 Introduction

http://hacks.mozilla.org/2009/12/uploading-files-with-xmlhttprequest/

reader.onload = function(e) { var bin = e.target.result; //binaryString // 読み取ったファイルをアップロード var xhr = new XMLHttpRequest(); xhr.open("POST", "upload.php"); xhr.overrideMimeType('text/plain; charset=x-user-defined-binary'); xhr.sendAsBinary(bin); // sendAsBinary は Firefox 独自です};// ... 酷い仕様で無駄に複雑になるので中略 ...dropzone.addEventListener("drop", function(event) { event.preventDefault(); // ドロップイベントの dataTransfer でファイルアクセス var allTheFiles = event.dataTransfer.files; alert("ドロップしたファイル数: " + allTheFiles.length); for (var i = 0; i < files.length; i++) { // バイナリファイルとして読み込み reader.readAsBinaryString(files[i]); // Firefox 独自 }}, true);

無駄に複雑な仕様なので省略しましたが、実用レベルではライブラリを使いましょう

Page 63: HTML5 Introduction

HTML5 Parser

HTML5 では互換性確保のためパーサ仕様も含む

仕様の曖昧性もブラウザ非互換の主要因

Firefox 3.6 以降で実装 (4 でデフォルト有効)

パース処理のスレッド分離で全体的に高速化

innerHTML 呼び出しは 20% 高速化

XML 名前空間無しで SVG/MathML 使用可

整形式でなくても SVG/MathML 使用可

ブラウザ非互換の原因やバグを多数解消

地味だが非常に重要な機能https://dev.mozilla.jp/hacksmozillaorg/firefox-4-the-html5-parser-inline-svg-speed-and-more/

Page 64: HTML5 Introduction

Native MultimediaVideo, Animation, 3D ...

Page 65: HTML5 Introduction

Open VideoOn2 Tech.

VP3Xiph.Org Google

OggVP4TheoraVP5VP6VP7VP8

Vorbis

Matroska

VorbisVP8

WebM

Page 66: HTML5 Introduction

Open Video

HTML5 で Video タグの Codec 指定はない

高品質かつロイヤリティフリーな Codec が必要

Web 標準はロイヤリティフリーが大前提

先日までは Ogg Theora が最有力の Open Video

WebM (Web Media) が公開され問題解決か?

WebM = VP8+Vorbis in Matroska

Google が On2 を買収し VP8 を OSS 化

Google, Mozilla, Opera, Adobe, MS などが採用

Theora は Firefox 3.5~, WebM は Firefox4~

Page 67: HTML5 Introduction

On2 Tech.VP3

Xiph.Org Google

OggVP4TheoraVP5VP6VP7VP8

Container

Vorbis

Matroska

VorbisVP8

AudioVideo

WebM

ロイヤリティフリーWebM プロジェクト FAQ: http://www.webmproject.org/about/faq/

Page 68: HTML5 Introduction

SVG Animation

Page 69: HTML5 Introduction

SVG Animation

SVG のアニメーション関連機能

SMIL Animation ベースの仕様

SVG は SMIL のホスト言語という位置づけ

<animate>, <set> などで属性の変更を定義

<animateMotion>, <animateTransform> 実装済

<animateColor> は仕様に不備があり pending

<animate> の機能制約版に過ぎず必要性も低い

Firefox 4, Safari, Chrome, Opera でサポート

IE では類似仕様の HTML+TIME をサポート

SVG Test Suite 結果表: http://www.codedread.com/svg-support.php

Page 70: HTML5 Introduction

http://people.mozilla.com/~dynamis/demo/smil/<svg ... xmlns="http://www.w3.org/2000/svg" xmlns:xlink="..."> ... <ellipse cx="290" cy="200" rx="80" ry="80"><!-- 中心の円 --> <!-- 毎秒指定色へと変化する 5秒間の色変更を無限に繰り返す --> <animate attributeType="CSS" attributeName="fill" dur="5s" values="#ff8; #f88; #f8f; #88f; #8ff; #8f8" keyTimes="0; .2; .4; .6; .8; 1" repeatCount="indefinite"/> </ellipse> ... <g id="R1" transform="translate(200, 200)"><!-- グループ化 --> <ellipse id="EL" cx="0" cy="0" rx="100" ry="30" ...><!-- 周囲の楕円 --> <animateTransform attributeName="transform" type="rotate" dur="7s" from="0" to="360" repeatCount="indefinite"/><!-- 回転 --> <animate attributeName="cx" dur="8s" values="-20; 120; -20" keyTimes="0; .5; 1" repeatCount="indefinite"/><!-- 中心の移動 --> <animate attributeName="ry" dur="3s" values="10; 60; 10" keyTimes="0; .5; 1" repeatCount="indefinite"/><!-- 半径の変更 --> </ellipse> </g> <use xlink:href="#R1" transform="rotate(30, 300, 200)"/><!-- 回転複製 --> ...</svg>

Page 71: HTML5 Introduction

WebGL

Firefox 4~ http://www.khronos.org/webgl/wiki/Demo_Repository

Page 72: HTML5 Introduction

WebGL

The Khronos Group で API 仕様を策定

Apple, Google, Mozilla, Opera が参加

OpenGL ES 2.0 ベースの API を JS から使う

シェーダーやテクスチャなども当然利用可能

<canvas> の 3D コンテキストとして定義

Firefox 4 や WebKit Nightly でサポート

Firefox では about:config で有効化する

webgl.enabled_for_all_sites = true

Google の O3D は Gears 同様に開発終了Firefox 4~ https://developer.mozilla.org/en/WebGL

Page 73: HTML5 Introduction

https://developer.mozilla.org/en/WebGL/Getting_started_with_WebGL

<canvas id="glcanvas" width="640" height="480"/><script type="text/javascript">var canvas = document.getElementById("glcanvas");// WebGL コンテキストを取得// Firefox では "moz-webgl" または "experimantal-webgl"// WebKit では "webkit-gl" を引数に指定するvar gl = canvas.getContext("webgl");if (gl) { // WebGL コンテキストの初期化  gl.clearColor(0.0, 0.0, 0.0, 1.0);  gl.clearDepth(1.0);  gl.enable(gl.DEPTH_TEST);  gl.depthFunc(gl.LEQUAL); // ... OpenGL 同様にいろいろ描画処理 ...}</script>

Page 74: HTML5 Introduction

Beyond HTML5Future Web Platform

Page 75: HTML5 Introduction

Audio Data API

デモ紹介ブログポスト: http://vocamus.net/dave/?p=974

Page 76: HTML5 Introduction

Audio Data API<audio> データを操作する JS API の試験実装中

WHATWG では当初 audio canvas として検討

<video> データの解析は <canvas> 経由で

onloadedmetadata イベントを拡張

channels, rate, volume などを追加

onaudiowritten イベントを新しく定義

フレームバッファと開始時間が得られる

Audio クラスでゼロから音の合成も可能

詳細は: https://wiki.mozilla.org/Audio_Data_API

Page 77: HTML5 Introduction

Orientation

Firefox3.6~ http://r.dynamis.jp/oryzeademo

Page 78: HTML5 Introduction

Orientation

CSS と JavaScript の両方で利用可能

メディアクエリーで縦横画面別の CSS を指定

@media all and (orientation: portrait) { ... }

MozOrientation イベントで JavaScript 処理

window.addEventListener("MozOrientation", orientationHandler, true);定期的に加速度センサーからのイベント発生

デバイス面の法線ベクトル成分 x,y,z を取得

Firefox3.6~ http://hacks.mozilla.org/2009/10/orientation-for-firefox/

Page 79: HTML5 Introduction

https://developer.mozilla.org/en/Detecting_device_orientation

<!-- 縦方向 (portrait) と横方向 (landscape) の CSS --><link rel="stylesheet" href="portrait.css" media="all and (orientation:portrait)"><link rel="stylesheet" href="landscape.css" media="all and (orientation:landscape)"><style>@media all and (orientation: portrait) { ... }@media all and (orientation: landscape) { ... }</style><script type="text/javascript">window.addEventListener("MozOrientation", handleOrientation);function handleOrientation(orientData) {    var x = orientData.x; // デバイスの法線ベクトル X 成分  var y = orientData.y; // デバイスの法線ベクトル Y 成分  var z = orientData.z; // デバイスの法線ベクトル Z 成分    // デバイスの傾きに応じた適当な処理を行う}</script>

Page 80: HTML5 Introduction

Multi-touch

Page 81: HTML5 Introduction

Multi-touch

:-moz-system-metric(touch-enabled) CSSセレクタ

MozTouchDown, MozTouchMove, MozTouchUp イベントで JavaScript 処理

document.addEventListener("MozTouchMove", touchHandler, true);位置の取得はマウス同様 screenX, clientX とか

現状は Windows 7 にのみ対応した試験実装

Firefox 4 での標準サポートは未定

タッチジェスチャーなども含めて検討中

https://wiki.mozilla.org/Firefox/Projects/Multitouch_Polish

Page 82: HTML5 Introduction

http://www.mgalli.com/development/drawing/demoapp.html

<canvas id="canvas" width="1200" height="800"/><script type="text/javascript">var ctx = document.getElementById("canvas").getContext('2d');

window.setInterval(function fadeOut() { ctx.fillStyle = 'rgba(255,255,255,.1)'; ctx.fillRect(0,0,1200,800);}, 200); // 描いたものを自動フェードアウト

function drawCircle(e) { // タッチした位置に円を描画する ctx.fillStyle='rgba(0,0,0,1)'; ctx.beginPath(); ctx.arc(e.clientX, e.clientY, 20, 0, Math.PI*2, 1); ctx.fill(); ctx.closePath();}document.addEventListener("MozTouchMove", drawCircle, false);</script>

https://wiki.mozilla.org/Firefox/Projects/Multitouch_Polish/DOM_Events/Examples

Page 83: HTML5 Introduction
Page 84: HTML5 Introduction

Any Question ?

Page 85: HTML5 Introduction

Any Question ?

end.

Page 86: HTML5 Introduction

Tips & HacksWeb Only Contents (・・).

Page 87: HTML5 Introduction

Native JSON

ブラウザネイティブ実装の JSON 変換メソッド

JSON.parse(), JSON.stringfy()

セキュアかつ高速な変換処理が可能

使える限り使った方が良いです

IE8 でもサポート (2010/02 に挙動変更)

それ以前には json2.js などのライブラリを利用

http://www.json.org/js.html

ECMA 5th の trim() などもネイティブメソッド...

Firefox.3.5~ https://developer.mozilla.org/en/Using_native_JSON

Page 88: HTML5 Introduction

https://developer.mozilla.org/ja/Using_native_JSON

var foo = {};foo.str = "some string";foo.num = 3;foo.func = function(){ alert('(・・).'); };

var jsonString = JSON.stringify(foo);// jsonString = '{"str":"some string","num":3}'// リテラルと違いキー名も引用符で括られる// 関数のプロパティは JSON 仕様外なので無視される

var foo2 = JSON.parse(jsonString); // foo2 = {str: "some string", num: 3}

foo2.toJSON = function(){ return "bar"; }var jsonString2 = JSON.stringify(foo2)// jsonString2 = "bar";// toJSON() メソッドがあればその結果が使われる

Page 89: HTML5 Introduction

about: <Video>

HTML5 では <video> や <audio> タグを追加

サポート Codec の違いには注意が必要

Firefox は特許問題のない Ogg/WebM に対応

H.264 特許権利者の Apple は H.264 のみ対応

特許権ない Google は Ogg/WebM/H.264 両対応

体感速度向上につながる属性に注意

ポスターフレーム画像を poster 属性に指定

自動バッファ設定は autobuffer 属性で指定

フルスクリーン対応は今のところ Firefox のみ

Firefox.3.5~ http://hacks.mozilla.org/category/video/

Page 90: HTML5 Introduction

http://hacks.mozilla.org/2009/12/autobuffering-video-in-firefox/

<video controls> <!-- 各コーデックと、非対応ブラウザ向けを列挙 --> <source src="video.webm" type="video/webm"/> <source src="video.ogg" type="video/ogg"/> <source src="video.mp4" type="video/mp4"/> <embed src="video.swf" width="500" height="396" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"/></video><!-- 自動バッファオン、ポスターフレームあり --><video controls autobuffer poster="posterframe.jpg"> ...</video><!-- 自動バッファのデフォルト動作はブラウザ次第です - デスクトップ Safari/Chrome はデフォルトでオン - Firefox/Opera, iPhone Safari はデフォルトオフ - 但し Opera はその予定なだけで autobuffer 未対応 -->

Page 91: HTML5 Introduction

Pointer Events

SVG 用 CSS pointer-events を HTML にも導入

Firefox 3.6 では auto と none だけ対応

pointer-events: auto; で従来通りの挙動

pointer-events: none; でマウスイベントを透過

例: 半透明画像下にあるリンクもクリック可能に

Firefox.3.6~ https://developer.mozilla.org/en/CSS/pointer-events

Page 92: HTML5 Introduction

http://demos.hacks.mozilla.org/openweb/pointer-events/<div class="boxContainer"> <div class="layer1"> クリックしたい下レイヤ <a href="a.html">リンクテキスト</a> </div> <!-- 半透明背景画像だけの上レイヤ --> <div class="layer2"></div></div><style>.layer1 { background-color: rgb(221, 238, 246); position: absolute;}.layer2 { /* 右端をフェードアウトさせる半透明レイヤ */ position: absolute; right: -15px; width: 155px; height: 120px; background: -moz-linear-gradient(right, rgba(0,34,51,1) 40px, rgba(0,34,51,0));}</style>

Page 93: HTML5 Introduction

Referencesfor more information...

Page 94: HTML5 Introduction

referenceshacks.mozilla.org - Mozilla と Web の最新技術紹介

http://hacks.mozilla.org/https://dev.mozilla.jp/hacksmozillaorg/

Firefox の最新機能紹介ページ

https://developer.mozilla.org/en/Upcoming_Firefox_features_for_developershttps://developer.mozilla.org/ja/Firefox_3.6_for_developers

WHATWG HTML5 (各機能のブラウザ実装状況含む)

http://www.whatwg.org/html5HTML5 の基本は矢倉さんのスライドがオススメ

http://www.slideshare.net/myakura/presentations

Page 95: HTML5 Introduction

ref. - statusHTML5 の対応状況は仕様書に書かれている

各項目のタイトル左側にポップアップ表示

http://www.whatwg.org/html5caniuse.com のまとめがオススメ

http://caniuse.com/http://caniuse.com/#cats=HTML5&statuses=rec,pr,cr,wd,ietf

WHATWG の Wiki

http://wiki.whatwg.org/wiki/Implementations_in_Web_browsersSVG Test Suite の結果表

http://www.codedread.com/svg-support.php

Page 96: HTML5 Introduction

ref. - toolsOpen Web ツール検索

http://tools.mozilla.com/Processing.js - Canvas 上で Processing を使う

http://processingjs.org/Contextfree.js - Canvas 上で ContextFree を使う

http://azarask.in/projects/algorithm-ink/http://code.google.com/p/contextfree/source/browse/trunk/contextfree.js

IE でも Canvas を描画可能にする uuCanvas.js

http://code.google.com/p/uupaa-js-spinoff/

Page 97: HTML5 Introduction

ref. - toolsJavaScript から簡単に SVG を生成

http://raphaeljs.com/Web アプリケーション用のフレームワーク

Cappuccino: http://objective-j.org/Sproutcore: http://www.sproutcore.com/JavaScriptMVC: http://javascriptmvc.com/

SVG や XUL にも対応するフレームワーク

Ample SDK: http://www.amplesdk.com/

一時 Gianduia も話題でしたが外部向けに公開されてないので現状論外

Page 98: HTML5 Introduction

ref. - web fontsCSS Fonts Module Level 3

http://www.w3.org/TR/css3-fonts/Google の Web Font サービス

http://code.google.com/webfontsWeb Fonts のライセンス販売 (無償フォント含む)

http://typekit.com/http://decomoji.jp/

Web Fonts Generator - eot や WOFF フォントに変換

http://www.fontsquirrel.com/fontface/generator