to topto bottom

モバイルファースト時代のマルチデバイス対応を確実・簡単に

HTML5 Advent Calendar

HTML5 API

この記事は、HTML5 Advent Calendar2012の17日目のエントリです。
 
こんにちは。x-fitチームエバンジェリストの渡辺です。いま@ITで連載をさせていただいていますが、仕事柄、Webサイトのスマートフォン表示や動作について調べています。スマートフォンのHTML5に対する対応の度合いはOSやバージョンによってかなりの差がありますが、HTML5のAPIについて、マイナーではあるもののスマートフォンをはじめとしたスマートデバイスで使えたら便利そうなもののご紹介と、そのAPIの現在の対応状況を調べてみようと思います。ご紹介するAPIは、"5 More HTML5 APIs You Didn’t Know Existed"から選びました。サンプルコードも一部を引用・改変しています。
 

Fullscreen API

 
Fullscreen APIは、ブラウザの全画面表示を行うためのAPIです。スマートデバイスは、画面サイズがそれほど大きくありません。画面サイズいっぱいに動画やコンテンツを表示することができれば、ユーザの視線を集中させることができるようになるでしょう。
 

サンプルコード

Fullscreen APIのサンプルコードは以下のようなものです。「Launch Fullscreen」ボタンは画面全体を、「Launch Fullscreen for an Element」ボタンは、画面のオレンジの要素のみを全画面で表示します。
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<title>full screen API</title>
<style type="text/css">
#anElement{
  padding: 20px;
  background-color: orange;
  border-style: solid;
  border-width: 2px;
  border-color: red;
}

</style>
</head>
<body>
  <div id="anElement">
  an Element
  </div>
  <div style="padding:20px;">
    <button onclick="launchFullScreen(document.documentElement);">Launch Fullscreen</button>
    <button onclick="launchFullScreen(document.getElementById('anElement'));">Launch Fullscreen for an Element</button>
    <button onclick="cancelFullScreen();">Hide Fullscreen</button>
  </div>


<script type="text/javascript">
//Find the right method, call on correct element
function launchFullScreen(element) {
  if(element.requestFullScreen) {
    element.requestFullScreen();
  } else if(element.mozRequestFullScreen) {
    element.mozRequestFullScreen();
  } else if(element.webkitRequestFullScreen) {
    element.webkitRequestFullScreen();
  }
}
function cancelFullScreen() {
  if(document.cancelFullScreen) {
    document.cancelFullScreen();
  } else if(document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if(document.webkitCancelFullScreen) {
    document.webkitCancelFullScreen();
  }
}

</script>
</body>
</html>
 

確認結果

 
いくつかの機種で確認してみました。使用したブラウザはiOS・Androidの代表的ブラウザです。表中で「-」になっているところは、そのブラウザが搭載されていない、またはアプリとしてインストールできないことを示しています。
 
機種 OS・Version ブラウザ
Androidブラウザ Chrome Safari Opera mini(iOS)
Opera mobile(Android)
Firefox IE
iPhone 4 iOS 4.0 - - × - - -
iPhone 5 iOS 6.0 - - × × - -
Xperia arc Android_2.3 × - - × -
GALAXY NEXUS Android_4.0 × × - × -
htc J butterfly Android_4.1 × × - × -
IS12T Windows
Phone 7.5
- - - - - ×
 
動作したときの画面キャプチャ(Launch Fullscreenボタンを押したときと、Launch Fullscreen for an Elementボタンを押したとき)
 

getUserMedia API

 
getUserMedia APIは、ブラウザが起動しているデバイスのカメラ、マイクのようなストリームを生成できるメディアを操作するためのAPIです。
 

サンプルコード

getUserMedia APIのサンプルコードは以下のようなものです。画面上部に、カメラからの映像をストリームで取得し、「Snap Photo」ボタンでキャプチャした画像を画面下部に表示します。
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0">
<title>Video Capture</title>
<style type="text/css">
#video,#canvas{
  border-style: solid;
  border-width: 1px;
  border-color: gray;
}
</style>
</head>
<body>
  <video id="video" width="320" height="240" autoplay></video>
  <button id="snap">Snap Photo</button>
  <canvas id="canvas" width="320" height="240"></canvas>

  <script>
    // Put event listeners into place
    window.addEventListener("DOMContentLoaded", function() {
      // Grab elements, create settings, etc.
      var canvas = document.getElementById("canvas"),
        context = canvas.getContext("2d"),
        video = document.getElementById("video"),
        videoObj = { "video": true },
        errBack = function(error) {
          console.log("Video capture error: ", error.code); 
        };

      // Put video listeners into place
      if(navigator.getUserMedia) { // Standard
        navigator.getUserMedia(videoObj, function(stream) {
          video.src = stream;
          video.play();
        }, errBack);
      } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
        navigator.webkitGetUserMedia(videoObj, function(stream){
          video.src = window.webkitURL.createObjectURL(stream);
          video.play();
        }, errBack);
      }

      // Trigger photo take
      document.getElementById("snap").addEventListener("click", function() {
        context.drawImage(video, 0, 0, 320, 240);
      });
    }, false);

  </script>
</body>
</html>
 

確認結果

機種 OS・Version ブラウザ
Androidブラウザ Chrome Safari Opera mini(iOS)
Opera mobile(Android)
Firefox IE
iPhone 4 iOS 4.0 - - × - - -
iPhone 5 iOS 6.0 - - × × - -
Xperia arc Android_2.3 × - - × -
GALAXY NEXUS Android_4.0 × × - × -
htc J butterfly Android_4.1 × × - × -
IS12T Windows
Phone 7.5
- - - - - ×
 
動作した時の画面キャプチャ

Battery API

 
Battery APIは、モバイルデバイス用に特化したAPIと言えます。バッテリーの充電ステータスや、残量などを知ることができます。
 

サンプルコード

Battery APIのサンプルコードは以下のようなものです。充電しているかどうか、バッテリー残量、放電時間を表示します。
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<title>battery</title>
</head>
<body>
<div id="message"></div>
<script type="text/javascript">
  //Get the battery!
  var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery;
  // A few useful battery properties
  var batProps = "";
  batProps = batProps + "Battery charging: "+battery.charging; // true
  batProps = batProps + "Battery level: ", battery.level; // 0.58
  batProps = batProps + "Battery discharging time: ", battery.dischargingTime;
  $("#message").html(batProps);
  // Add a few event listeners
  battery.addEventListener("chargingchange", function(e) {
    alert("Battery charge change: "+battery.charging);
  }, false);
</script>
</body>
</html>
 

確認結果

機種 OS・Version ブラウザ
Androidブラウザ Chrome Safari Opera mini(iOS)
Opera mobile(Android)
Firefox IE
iPhone 4 iOS 4.0 - - × - - -
iPhone 5 iOS 6.0 - - × × - -
Xperia arc Android_2.3 × - - × -
GALAXY NEXUS Android_4.0 × × - × -
htc J butterfly Android_4.1 × × - × -
IS12T Windows
Phone 7.5
- - - - - ×
 
動作した時の画面キャプチャ

総評

 
ご紹介したAPIのスマートフォンでの対応は、まだ芳しくない状態ですね。とくに各機種とも、標準ブラウザに相当するブラウザはまだサポートされていません。サードパーティブラウザでは、サポートされているものもありました。アプリとして使ってもらうために積極的に新機能を追従しようとしているのかもしれませんね。
 
このエントリーをはてなブックマークに追加