目次
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を使って画面を共有可能
- Safari 13では
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
- Payment Request APIを使い全機能をサポート
- より標準化した形でApple Pay JSの全ての性能をWebコンテンツに導入できる
- WKWebViewでApple Payが使用可能に
- 注意点: Scriptが既に插入済みの場合はApple Payは機能しない
- 同様に
canMakePayments
を呼び出している場合Scriptを插入できない - Apple Payボタンを表示したりする前に
canMakePayments
を呼び出して、利用可能かチェックすること - WKUserScriptやevaluateJavascriptなどを用いたScriptの插入はしない方が良い
- 同機能のAPIがWebKitにあるため