インターン生は、連日の講義と課題で大変そうですが、今日も講義が続きます。
本日は、
id:nanto_viによる「ユーザインターフェース,HTML5」です。仕様書を隅々まで読んだ講師によるディープな講義内容となっています。今日も2時間の長丁場ですが、頑張って着いていきましょう!
ユーザーインターフェースで大切なこと、HTML5 及び関連 API で何ができるか
nanto_vi (外山真, TOYAMA Nao)interface
【名】英辞郎 on the Web:スペースアルク
- 接合部分、接触面◆異質な物の間の
- 接点、仲立ち、連絡(係)、橋渡し(役)◆【同】liaison
- 《コ》インターフェース
- 《物理》界面
Design Principles
cf. 概念モデル
もし人々に何がほしいか尋ねていたら、彼らはより速い馬がほしいと答えていただろう。
ヘンリー・フォード
様々な場所に JS (+ Flash) が
ハイブリット (JS と Flash の合わせ技) も使われている
あなたを識別し、あなたと対話し、あなたを理解する。 RT @eto: 「Webにとって必要な要素を重要度の順に並べてみると、URI、HTTP、そしてHTMLである。」Tim Berners-Lee「Webの創成」p.53
<!DOCTYPE html><htmllang="ja"><head><metacharset="utf-8"><title>こんにちは、世界 - お試しサイト</title></head><body><h1>こんにちは、世界</h1><plang="en">Hello, world.</p><p><ahref="/so?me=th&in=g">何か</a>いる。</p></body></html>
おすすめは、
<、>、&、" はそれぞれ<、>、&、"<scripttype="text/javascript"src="/js/foo.js"></script><scripttype="text/javascript">if(x && y) call('<script type="text/javascript"><\/script>');</script>
<!-- と</script を直接記述しなければ何でも書ける<!-- を書いたら、対応する--> を書く必要あり"</" はすべて"<\/" と書くのが安全だいたい、XSS なんてのは「何が起きても常に valid な HTML を出力する」という誇りがありさえすれば、それだけで 9割方回避できるのです。ユーザが入力した < を文字参照に変換する処理は、誇りを守るための処理であって、セキュリティを意識したものではないのです。
H18年度ウェブアプリケーション開発者向けセキュリティ実装講座 | 水無月ばけらのえび日記
section、article、nav、aside などセクションを生成する要素の導入h1 -h6 要素を使うだけでも、それなりに適切なアウトラインが生成されるcanvas 要素<spanid="my-graph">25日: 130 km/h, 30日: 160 km/h</span><script>function drawGraph(){var canvas =document.createElement('canvas');if(!canvas.getContext)return; canvas.setAttribute('width','300'); canvas.setAttribute('height','300');var placeholder =document.getElementById('my-graph'); placeholder.parentNode.replaceChild(canvas, placeholder);var context = canvas.getContext('2d'); context.strokeRect(...); ...}drawGraph();</script>
video、audio 要素<videowidth="300"height="300" control><sourcesrc="video.ogv"type="video/ogg; codecs="theora, vorbis""><sourcesrc="video.mp4"type="video/mp4; codecs="avc1.42E01E, mp4a.40.2""><objectdata="video.swf"type="application/x-shockwave-flash"width="300"height="300"><paramname="movie"value="video.swf"> かくかくしかじかなビデオがあり、……</object></video>
input イベント<inputtype="url"><inputtype="date" required><inputtype="text" placeholder="チャンネル名を入力">
<labelfor="my-check"><inputid="my-check"type="checkbox"> 確認する</label>
element.contentEditabledocument.designModedocument.execCommand()draggable 属性<input type="file"> で選択したファイルを取得<p itemscope><span itemprop="name">nanto_vi</span> さんの<ahref="http://b.hatena.ne.jp/nanto_vi/" itemprop="bookmarks">ブックマーク</a></p>
a、area、link 要素のrel 属性data- から始まる属性<uldata-eid="42"><lidata-user="nanto_vi">nanto_vi said yes.</li><lidata-user="r_kurain">r_kurain said no.</li></ul>
http://example.org/foo/bar の生成元はhttp://example.orgsessionStoragelocalStorageif (window.localStorage){ localStorage.foo ='bar'; doSomething(localStorage.foo);}
online、offline イベントwindow.addEventListener('offline',function (event){alert('オフライン状態になりました');},false);
history.pushState()history.replaceState()hashchange イベント# 以下) の変更時に発生window) にメッセージを送信<!-- http://example.org/foo --><iframeid="my-frame"src="http://example.com/bar"></iframe><script>var frame =document.getElementById('my-frame');// 生成元が http://example.com である// 文書にメッセージ "hello" を送信frame.contentWindow.postMessage('hello','http://example.com')</script>
<!-- http://example.com/bar --><script>window.addEventListener('message',function(event){// http://example.org からのメッセージのみ処理if(event.origin !=='http://example.org')return;alert(event.data);// "Hello"// メッセージを送り返すevent.source.postMessage('world',event.origin);},false);</script>
progress イベントvar source =new EventSource('/event/source');source.onmessage =function (event){alert(event.data);};
var worker =new Worker("fibonacci.js");worker.onmessage =function (event){document.getElementById("result").textContent =event.data;};
node.querySelector('p')nullnode.querySelectorAll('#foo .bar')DocumentFragment に対しても利用可能<dl role="tablist"><dtid="a" role="tab" aria-selected="true"tabindex="0">A</dt><dd role="tabpanel" aria-labelledby="a">...</dd><dtid="b" role="tab"tabindex="0">B</dt><dd role="tabpanel" aria-labelledby="b" aria-hidden="true">...</dd></dl>
attribute がプロパティに対応[...] で付加情報を記述interfaceHTMLElement :Element{// DOM tree accessorsNodeListgetElementsByClassName(inDOMStringclassNames);// metadata attributesattributeDOMStringid;attributeDOMStringtitle;attributeDOMStringclassName;readonlyattributeDOMTokenListclassList;readonlyattributeDOMStringMapdataset;// microdataattributebooleanitemScope;attributeDOMStringitemType;attributeDOMStringitemId; [PutForwards=value]readonlyattributeDOMSettableTokenListitemRef; [PutForwards=value]readonlyattributeDOMSettableTokenListitemProp;readonlyattributeHTMLPropertiesCollectionproperties;attributeanyitemValue;// user interactionvoidfocus();voidblur();};
<style>.foo{background:#ffaa66url("/images/bg.png");color:#ffffff;}#xli{border:2pxsolid#f0e01f;}</style>...<divid="x"><ulclass="foo bar"><li>...</li><li>...</li></ul></div>
canvas 要素)submit、focus、load、etc.)event.stopPropagation() で浮上を停止Document Object Model (DOM) Level 3 Events Specification
<olid="list"><li>最初の項目</li><li>第二の項目</li></ol><script>var list =document.getElementById('list');list.addEventListener('click',function(event){if(event.target.nodeName.toLowerCase() !=='li')return;event.target.textContent +=' [checked]';},false);</script>
click イベントならリンク先への移動event.preventDefault() でデフォルトアクションを中止focus、load、etc.)<ahref="...">def...</a><script>a.addEventListener('click',function(event){ ...event.preventDefault();event.stopPropagation();},false);</script>
id:koudenpa
id:hatenatech
id:yunagi_n
id:motemen
id:rskmm0chang
id:lufiabb
id:daiksy
id:onk
id:yigarashi
id:cohalz
id:tokizuoh
id:kk__777
id:s-shiro
id:yutailang0119
id:fxwx23
id:CNaan
id:walnuts1018
id:todays_mitsui
id:MysticDoll
id:taxintt
id:kouki_dan
id:vilagia
id:masayoshi
id:gano-k
id:handat
id:KashEight
id:r4wxii
id:cateiru
id:matsudamper
id:mangano-ito
id:gurrium
id:k1s1eee
id:chaya2z
id:onishi
id:heleeen
id:cockscomb
id:masayosu
id:Furutsuki
id:hagihala
id:maku693
id:blog-media
id:d-haru
id:kmuto
id:arthur-1
id:nabe1216
id:tkzwtks
id:momochi29
id:mizdra
id:KGA
id:miki_bene
id:astj
id:nanto_vi
id:do-su-0805
id:nakiwo
id:wtatsuru
id:missasan
id:hogashi
id:polamjag
id:susisu
id:hitode909
id:Pasta-K
id:chris4403
id:yashigani_w
id:ueday
id:pokutuna引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。