HTML5의 소개 및 지원되는 않는 브라우져에서의 사용법 (7 - Geolocation) html5

저자 : Mark Pilgrim

Geolocaiton은 당신이 공유하고 있는 정보 또는 사람들에 대해서 믿을 수 있는지에 대해서 알 수 있다.
당신은 많은 방법으로 알 수 있다.(IP address, 연결된 무선 네트워크, 핸드폰 정보 또 GPS 하드웨어를 통해
위성으로 부터 위도, 경고 같은 정보들을 받을 수 있다.)

궁금한 점이 생길 것이다.
Q.geolocation이 HTML5의 일부분인가? 왜 이 기능에 대해서 설명하는 것인지?
Geolocation은 현재 브라우져에서 지원하고 있고, 그들은 HTML5 특징에 지원여부를 추가하고 있다.
엄밀히 말하면, geolocation은 Geolocation Working Group(http://www.w3.org/2008/geolocation/)에 의해 표준화
되고 있고, 이것은 HTML Working Group과 분리되어 있다. 그러나 관련글 내에서는 geolocation에 대하여 얘기를
할려고 한다.

웹의 진화에 있어서의 일부분이고 이런일이 현재 일어나고 있기 때문이다.

geolocation API(http://www.w3.org/TR/geolocation-API/)를 통해 믿을수 있는 웹사이트들과 함께 당신의
위치정보를 공유할 수 있다.
윈도, 경도는 javascript를 통해 가능하고, 이것은 지도를 통한 당신의 위치를 보여주고, 지역 회사등을 찾는 일과 같은
위치인식등을 원격의 웹서버를 통해 전달받을 수 있다.

궁금한 점이 생길 것이다.

Q.Geolocation이라는 기능이 왠지 섬뜻하다. 끌수도 있는 것인가?
개인정보에 대해서는 당신이 원격의 웹서버에 당신의 물리적 위치에 대한 공유를 얘기했을때 관계가 있다.
geolocation API explicitly states(http://www.w3.org/TR/geolocation-API/#security)에서 사용자의 허락과
관련된 표현없이 웹사이트들에서 위치 정보를 보내지 않는다. 다른말로 하면 당신의 위치정보를 공유하는것은 항상
옵션이다. 당신이 원하지 않는다면 하지 않을 것이다.

원서 : http://diveintohtml5.org/detect.html


HTML5의 소개 및 지원되는 않는 브라우져에서의 사용법 (6 - Offline Web Applications) html5

저자 : Mark Pilgrim

오프라인된 웹페이지를 읽는것은 쉬운 일이다: 인터넷을 연결하거나, 웹페이지를 로딩하고, 인터넷으로부터 연결을
끊거나, 왼딴곳에서 운영을하거나, 취미등으로서 웹페이지를 읽는등(시간을 절약할 수 있고, 아마 모아진 정보에
대해서 내가 원하는 정보를 바로 보기를 원할것이다.)

그러나 Gmail이나 Google Docs와 같은 웹 어플리케이션이 그러한가? HTML5에서는 고맙게도 누구나 offline에서도
웹어플리케이션을 만들 수 있다.

Offline web applications(http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#offline)는
online 웹어플리케이션에서 벗어나기 시작했다.
첫째로, 당신은 offline에서 활성화된 웹페이지를 방문할 수 있고, offline에서 동작하기위해 필수적인 파일들을
웹서버에서 브라우져에 알려준다.

이러한 파일들은 어떤것이든 될 수 있다.(HTML, Javascript, Images, video등)

당신의 브라우져는 필요한 모든 파일들을 다운로드할 것이고, 당신이 인터넷에 연결되어 있지 않을 때도 웹사이트들을
재방문할 수 있다.
당신의 브라우져는 당신이 오프라인 되었을때 필요한 파일들을 다운로드하여 사용할 수 있다고 알려줄 것이다.
다시 온라인 되었을때, 당신은 원격에 있는 웹서버에 변경된 어떤것들도 업로드 할 수 있다.

브라우져가 offline web applications을 지원한다라면 전역 window객체의 속성인 applicationCach 속성을
사용할 수 있다.
하지만 지원하지 않는다면 applicationCache속성은 정의되어 있지 않을 것이다.

function supports_offline() {
  return (typeof window.applicationCache != 'undefined');
}


Modernizr(http://www.modernizr.com/)에서는 아직 지원하지 않고 있다.

원서 : http://diveintohtml5.org/detect.html


HTML5의 소개 및 지원되는 않는 브라우져에서의 사용법 (5 - Local Storage(like cookie), Web Worker(Thread)) html5

 - Local Storage

HTML5 storage(http://dev.w3.org/html5/webstorage/)는 컴퓨터에서 저장된 정보나 복구하여 웹사이트에사 사용하는
방법을 제공한다.
이 개념과 비슷한 원리는 cookies이지만 거대한 양의 정보를 저장하기 위해서 디자인되었다.
Cookies는 저장되는 사이즈가 저장되어 있고, 데이터를 전송할때마다 매시간 서버에 새로운 페이지를 요청한다.
(이것은 추가적인 시간이나 brandwidth를 소비한다.)
HTML5 storage는 서버에 요청하지 않게 하면서, 웹사이트는 페이지 로드 후에 자바스크립트등을 접근가능하게 해준다.

Local Storage와 관련되어 HTML5 스펙에 포함이 되어 있는지 그렇다면 왜 따로 분리하여 명세서가
존재하는지에 대해서
궁금할 것이다.
그것에 대한 답변은 물론 Local Storage는 주요한 HTML5 명세서에 포함되어 있지만, 분리되어 명세서가 존재하는
이유는 "HTML5의 대한 내용이 방대하기 때문이다"라고 HTML5 Working Group에서 몇몇은 설명하고 있다.

브라우져가 HTML5 storage를 지원한다면, 전역 window 객체인 localStorage 속성을 사용 할 수 있다.
HTML5 storage를 지원하지 않는다면, localStorage 속성은 정의되어 있지 않을 것이다.

function supports_local_storage() {
  return (typeof window.localStorage != 'undefined');
}

Modernizr(http://www.modernizr.com/)는 아직 지원하지 않고 있다. 필요하다면 함수를 따로 만들어야 한다.

그렇다면 또 궁금한 점이 생길것이다. HTML5 storage database의 보안은 어떤지?
누구나 볼 수 있는 것인지?

사용자의 HTML5 storage database는 사용자의 컴퓨터를 사용할 수 있는 사람이라면 누구든지 물리적으로 접속 가능하다.
사용자의 브라우져에서 웹사이트의 값을 읽고 수정할 수 있지만, 해당 사이트들은 다른 사이트에 의해서 저장되어진 값들을 확인할 수 없게 할 수 있다.
이러한 방법을 same-origin restriction
(http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#origin-0)이라고 부른다.

- Web Workers

Web Workers는 브라우져에서 Javascript를 실행할때 background에서 실행되는 것을 표준적인 방법으로 제공한다.
Web Workers를 더많이 혹은 적게 같은 시간에 모든것을 실행하는 방법인 multiple "threads"를 생성한다.
(예를들면, 같은 시간에 당신의 컴퓨터에서 다양한 application을 실행할 수 있다라는 것이다.)
이것은 "background threads"고 복잡한 수학적 계산을 가능하게 하면서, network requests를 만들고, local storage를 접속가능하게 주면서, 웹페이지의 scrolling, clicking, typing에 응답하게 해준다.

브라우져가 Web Worker API를 지원한다면 전역 window객체의 worker 속성을 사용할 수 있다. Web Worker API를 지원하지 않는다라면 worker속성 또한 정의되어 있지 않을 것이다.

function supports_web_workers() {
  return typeof window.Worker != 'undefined';
}

이 기능 또한 Modernizr에서 아직 지원하지 않고 있고, 필요하다면 함수를 따로 만들어야한다.

원서 : http://diveintohtml5.org/detect.html


CSS3를 지원하지 않는 브라우져에서 사용 방법 css3

저자 : Alex Walker

- FF3.6에서 지원되는 CSS3 속성

1. multiple background images
2. -moz-background-size 속성
3. CSS gradients
- 향상된 display:table rendering

올해말에 배포되어지는 Firefox 3.6버전에서 위의 내용과 같은 CSS3의 특징들을 사용할 수 있을 것이다.

1. Multiple Background Images

multiple background images라는 개념은 정말 훌륭한 방법이고, layout작성시 몇가지 trick을 사용하여
의미없는 태그를 줄일 수 있다.

기본적인 문법은 매우 쉽다. background-images속성에 하나의 이미지만 사용하는 것이 아니라 최대 4개까지 이미지를
사용할 수 있다.

또한 각각의 이미지에 background-repeat과 background-position속성을 줄 수 있다.

#multi {
    background-image: url(old-paper2.jpg); /*FF,Opera, not support browser*/
    background-image: url(old-paper.png), url(old-paper2.jpg);
    background-repeat: no-repeat; /*FF,Opera, not support browser*/
    background-repeat: no-repeat, no-repeat;
    background-position: top left; /*FF,Opera, not support browser*/
    background-position: top left, bottom right;
    border:1px #963 solid; /*FF,Opera, not support browser*/
    border-color:#D8CCA7 #999 #633 #9A804E
}


두번째 정의한 이미지가 먼저 읽혀 지고 그 다음에 두번째 이미지가 읽혀지게 된다.
현재 이 기능을 지원하는 브라우져는 Safari4.0, Chrome3.0, FF3.6 alpha이다.

다음 URL로 확인해 볼 수 있다.

http://www.sitepoint.com/examples/css3/multi.html

그렇다면 지원 안되는 브라우져에서는 어떻게 해결할 수 있을까?

위의 코드에서 주석문과 같이 FF3.5이하, Opera와 지원되지 않는 브라우져에서는 comma를 사용하지 않는 single background를 사용하고
IE에서는 위와 같은 방식으로 해결 되지 않기 때문에 핵을 사용하여 해결해주어야 한다.

<!--[if IE]>
<style type="text/css">
#multi {
 background-image: url(old-paper2.jpg);  
 background-repeat: no-repeat;
 background-position: top left;
}
</style>
<![endif]-->

이렇게 대체하는 방식으로 사용하는것은 유용하고 가치 있는 것이라고 생각하지만, 각각의 의도에 따라 달라 질 수 있다고 생각한다.
지원되지 않는 이전 버전의 브라우져에서 기본적인 동작이 가능하고 새로운 브라우져에서는 다양하고 화려한 디자인을
경험하게 한다라면 새로운 브라우져를 사용하는 사용층이 늘어날 것이라고 기대한다.

2. Background-size
background-size는 css background image의 size를 변경시킬 수 있다.
CSS3의 속성이고 지원하는 브라우져는 Chrome/Safari, Opera, FF3.6 alpha에서 지원하고 있다.
background-size속성은 background-image의 이미지의 크기를 변경시킬 수 있다.

코드는 다음과 같다.

body {
 background-image: url(background_image.jpg); /*IE, not support browser*/
 background-size: 50% 50%; /* w3c spec */
   -moz-background-size: 50% 50%; /* firefox css*/
   -webkit-background-size: 50% 50%; /* safari/chrome */
   -o-background-size: 50% 50%; /* opera css */
}

다음 URL로 확인해 볼 수 있다.

http://www.sitepoint.com/examples/css3/css3-background-size.html

background-size가 지원되지 않는 IE와 같은 브라우져에서는 가장 기본속성을 보여주게 하고
background-size가 지원되는 브라우져에 맞게 브라우져 핵을 써서 적용시켰다.

3. CSS Grandients

CSS background gradients는 FF3.6 alpha, safari4, chrome3버전에서만 지원하고 있다.
background-image와 같이 사용된다.

div#cssgradient2 {
 background-image: -moz-linear-gradient(top, bottom,from(#A1D004),to(#6B9A00));
 background-image: -webkit-gradient(linear, left top, left bottom,color-stop(0.00, #A1D004),color-stop(1.00, #6B9A00));
}

mozilla(FF), Webkit(Safari/Chrome)의 코드는 동일하지 않다. gradient를 설정하지 시작과 마지막 color값을 동일하게 요구한다.
(위치값은 - top, left, right, bottom등으로 설정해주면 된다.)

Webkit과 Mozilla는 방성형이나 직선형태의 gradients로 사용할 수 있다. 이 속성은 이러한 과장을 조금씩 변경되도록 다루고 있다.
Mozilla는 두개의 속성값을 분리(-moz-linear grandient(), -molz-radial-gradient())하여 다루고 있고,
Webkig은 하나의 속성값에서 parameter로 다루고 있다.(-webkig-grandient-(radial,...))

여기에서 간단한 예를 볼 수 있다.

http://www.sitepoint.com/examples/css3/gradient.html

CSS gradients는 최소 두개의 색깔을 요구한다. 두가지 method는 grandient를 변경시킬 여러개의 컬러값을 설정하는것을 허용한다.
무지개 gradient를 표현하는 코드는 다음과 같다.

/* fallback */
background: #F66 url(rainbow-gradient.jpg);

/*mozilla gradient*/
background-image: -moz-linear-gradient(left, right,
 from(red),
 color-stop(16%, orange),
 color-stop(32%, yellow),
 color-stop(48%, green),
 color-stop(60%, blue),
 color-stop(76%, indigo),
 to(violet));

/* webkit gradient */
background-image: -webkit-gradient(linear,
 left top, left bottom,
 color-stop(0.00, red),
 color-stop(16%, orange),
 color-stop(32%, yellow),
 color-stop(48%, green),
 color-stop(60%, blue),
 color-stop(76%, indigo),
 color-stop(1.00, violet));


흥미롭게도, IE는 무지개는 표한할 수 없지만 간단한 gradients를 filter속성을 사용하여 IE5부터 표현할 수 있다.
filter: progid:DXImageTransform.Microsoft.gradient(
 enabled='true',
 startColorstr=#A1D004,
 endColorstr=#6B9A00,
 GradientType=0
);

위의 코드에서 두가지를 아는 것이 필요하다.
첫째, 이 코드가 깔끔하지는 않지만 시작과 마지막 컬러값을 설정한 것을 볼 수 있다.
둘째, GradientType parameter는 gradient의 방향을 설정하다. 0으로 설정하면  수직 gradient이고 1은 수평이다.
대신 비스듬한 gradient는 ie에서 설정이 불가능하다.

CSS gradient를 사용함으로서 매력적인 3가지 이유이다.
1. 이미지를 사용하지 않고, contents의 양에따라 적절하게 표현하고, 비율에 맞춰 표현할 수 있다.
2. CSS gradients는 매율 효율적이고, 크고, 유연하고, 코드로 라인의 tone등을 설정 할 수 있고, 유저가 느끼는 페이지 로딩시간을
더 빠르게 느끼게 할 수 있다.
3. CSS gradients는 복잡한 tone이나 image가 할 수 없는 여러가지 표현들을 쉽고 빠르게 보여줄 수 있다.

FF, Chrome, Safari는 gradient의 지원을 완벽하게 하고 있다. IE는 간단한 표현이 가능한 gradient를 지원하고 있다.


원문 : http://articles.sitepoint.com/article/css3-infinity-beyond


HTML5의 소개 및 지원되는 않는 브라우져에서의 사용법 (4 - Video Formats) html5

저자 : Mark Pilgrim

Video format은 언어로 쓰는 것과 같다. 영어신문과 스페인 신문은 같은 정보를 전달하지만, 당신이 영어만 읽을 수 있다면
여러 언어의 신문중 영어신문만 읽을 수 있을 것이다. video를 play하기 위하여 브라우져들은 언어(video로 쓰여진)를 이해하는 것이 필수적이다.


위에서 언어라고 말한것은 video에서는 codec으로 불리어 진다. vidoe의 stream을 해석하기 위한 알고리즘을 사용한다.
불행하게도 HTML5 Video Tag에서는 코덱을 사용할 수 없다. 브라우져들은 두개정도의 동영상을 볼 수 있게 제공한다.
(라이센스 비용 때문이다.)

HTML5의 Video태그는 safari와 iphone에서는 잘동작한다.(Adobe Flash도 지원한다. 이것에 대한 해결 방법은 Video for Everybody! - http://camendesign.com/code/video_for_everybody 여기서 확인하면 된다.)

또 Chromium(http://code.google.com/intl/ko/chromium/)과 Mozilla Firefox(http://www.mozilla.or.kr/ko/)와 같은
오픈 소스 브라우져도 동작한다.

브라우져가 HTML5 Video를 지원한다면 DOM 객체는 <video>태그의 canPlayTYpe() method를 사용할 수 있다.
이 method는 브라우져에서 지원하는 video format에 대해서 확인해준다.

또, 이 기능은 Macs과 iPhones에서 지원하는 포맷을 확인 시켜준다.

function supports_h264_baseline_video() {
  if (!supports_video()) { return false; }
  var v = document.createElement("video");
  return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');
}

supports_video()함수의 사용은 이전 내용에서 다루고 있다. 브라우져가 HTML5 video를 지원하지 않는다면 어떠한 video format도 볼 수 없다.


if (!supports_video()) { return false; }


그리고 이 함수는 비어있는 video태그를 생성해주고(이 기능은 페이지에서 확인할 수도, 볼 수 도 없다.),
canPlayType() method를 호출한다.

이 method는 supports_video()함수로 존재여부를 체크해주기 때문에 video태그의 존재여부를 보장해준다.


var v = document.createElement("video");


"video format"은 여러종류의 일을 수행하는 조합이다. 기술적으로 보면 video태그가 H.264 Baseline video와 MPEG-4의
AAC LC audio를 실행할 수 있는지 아닌지를 확인할 수 있다.
(다음의 글을 읽으면 이런 비디오 종류에 대한 것을 이해할 수 있다. - http://diveintomark.org/tag/give)

return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');


canPlayType()함수는 Boolean값을 return하지 않는다. 복잡한 video format과 관련된 string값을 return 시켜 준다.


"probably" 브라우져가 현재 format을 실행시킬 수 있다는 확신이 있다면
"maybe" 브라우져가 현재 format을 실행시킬 수 있다는 판단이 되면
""(비어있는 값)브라우져가 현재 format을 실행시킬 수 없을때


여기서 설명하는 함수는 Mozilla Firefox 또는 다른 open source 브라우져들이 video format을 지원하는지를 확인한다.
위의 내용과 다른 이 함수의 차이점은 canPlayType()함수가 string값을 던져주는 것이다. 기술적으로 얘기하면
브라우져가 Theora video와 Vorbis audio(ogg)를 실행할 수 있는지 아닌지를 요청한다.

function supports_ogg_theora_video() {
  if (!supports_video()) { return false; }
  var v = document.createElement("video");
  return v.canPlayType('video/ogg; codecs="theora, vorbis"');
}


Modernizr에서는 각각의 video format을 확인해줄 수 없다. 그렇기 때문에 video태그를 사용할때 여기에 적혀진 함수를
사용해야 할 것이다.


원서 : http://diveintohtml5.org/detect.html


1 2 3 4 5 6 7 8 9 10 다음


메모장