Web Developerのための新機能 – WWDC2019

Session概要

WebKitには、AppでWebコンテンツを読み込み、表示し、管理するためのクラスが豊富に用意されています。
このセッションではダークモード、シェアシートの新しいプレゼンテーション機能、Apple PayのためのJavascript Payment APIといった強力なプラットフォーム機能にWebコンテンツを統合する方法について https://developer.apple.com/videos/play/wwdc2019/518/

WebKitの新機能

  • Dark Mode
  • Web Share
  • メディアの新機能
  • Webコンテンツの性能を向上させるための新しいツール
  • 構造化データの保存方法
  • Apple Pay

Dark Mode対応

  • darkを含むcolor-scheme値をCSSのrootに加える
    • ページ全体にdark modeが適用される
    • デフォルトのテキストや背景色などが自動的に更新される
  • カスタムスタイルの場合、手動での更新が必要
  • CSS適用外の画像にはpicture要素を使用する
    • media属性を使用すればdark mode用の画像に自動的に入れ替わる
  • Javascript matchMedia APIを使う場合も同様にMedia Queryで対応可能
  • さらなる詳細についてはWebKitのブログやWWDCの動画にて紹介されている
/* Enabling dark mode */
:root {
 color-scheme: light dark;
 --link-text-color: ...;
 --paragraph-background-color: ...;
 ...
}

/* Adapting content to dark mode with CSS */
@media (prefers-color-scheme: dark) {
 :root {
 --link-text-color: ...;
 --paragraph-background-color: ...;
 ...
 }
 ...
<!-- Adapting an image to dark mode with HTML -->
<picture>
 <source srcset="dark.jpg"
 media="(prefers-color-scheme: dark)">
 <img src="light.jpg">
</picture>
// Adapting dynamic content to dark mode with JavaScript
let darkModeMediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
function updateForDarkModeChange() {
 if (darkModeMediaQuery.matches) {
 ...
 } else {
 ...
 }
}
darkModeMediaQuery.addListener(updateForDarkModeChange);
updateForDarkModeChange(); // Handle if Dark Mode is already active.

Web Share

  • ネイティブのShareシートを呼び出せる
  • SafariでもWKWebViewでも共有可能
  • 使用方法は下記のように、 navigator.shareを呼び出すだけとなっている
    • Shareが完了したか、却下されたかはPromiseで受け取れる
    • しかし、このAPIはユーザのタップ操作に反応するため他の操作では即拒否される
  • Web Share APIはTwitterなどでも実装されている
// Using the Web Share API after the user clicks a button
let shareButton = document.createElement("button");
shareButton.addEventListener("click", async (event) => {
 try {
 await navigator.share({
 title: "Dark Mode Support in WebKit",
 text: "Learn about how to support Dark Mode in your web content.",
 url: "https://webkit.org/blog/8840/dark-mode-support-in-webkit",
 });
 } catch (error) {
 ...
 }
});

メディアの新機能

  • ユーザのデバイスに最適なコンテンツを表示させるために Media Capabilities APIが使える
    • Video Codecやアルファチャンネルがサポートされているか
    • 処理速度や電力効率が適切かを判断可能
  • macOS CatalinaやiOS 13でもアルファチャンネルをサポート
    • HEVCでエンコードしたビデオに透明度を加えられる
navigator.mediaCapabilities.decodingInfo(configuration).then((capabilities) => {
 if (capabilities.supported) {
 if (capabilities.powerEfficient) {
 ...
 }
 if (capabilities.smooth) {
 ...
 }
 } else {
 ...
 }
});

WebRTC Screen Capture

  • P2Pのチャット機能を備えたWebサイトではスクリーンショットも重要
    • Safari 13では getDisplayMedia API が使用可能
    • ユーザにスクリーンショットの許可を促す
    • WebRTCを使って画面を共有可能
navigator.mediaDevices.getDisplayMedia({ video: true }).then((stream) => {
 let videoElement = document.createElement("video");
 videoElement.src = URL.createObjectURL(stream);
 rtcPeerConnection.addTrack(stream.getVideoTracks()[0]);
 ...
});

Webコンテンツの性能を向上させるための新しいツール

  • Web Inspectorに新型CPU Timelineを搭載
  • iOS向け WebDriver
    • 自動回帰テスト向けの標準フォーマットをiOS 13のデバイスで利用可能

構造化データの保存方法

  • Safari 13では WebSQLは削除され, IndexedDBを標準準拠
    • 早めに移行するのが望ましい

Apple Pay

  1. Payment Request APIを使い全機能をサポート
    • より標準化した形でApple Pay JSの全ての性能をWebコンテンツに導入できる
  2. WKWebViewでApple Payが使用可能に
    • 注意点: Scriptが既に插入済みの場合はApple Payは機能しない
    • 同様に canMakePaymentsを呼び出している場合Scriptを插入できない
    • Apple Payボタンを表示したりする前に canMakePaymentsを呼び出して、利用可能かチェックすること
    • WKUserScriptやevaluateJavascriptなどを用いたScriptの插入はしない方が良い
      • 同機能のAPIがWebKitにあるため
最新情報をチェックしよう!