Copyright © 2024 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
このセクションは、本書の公開時点でのステータスについて説明しています。現行のW3C の出版物と、この技術レポートの最新版は、W3C技術レポート一覧 https://www.w3.org/TR/ で確認できます。
Devices and Sensors Working Groupは、本仕様に編集上の近代化を適用し、APIのセキュリティ及びプライバシーの側面について自己レビューと改訂を行い、水平レビューを申請する前に一巡します。既存の セキュリティとプライバシーの課題が公開されています。
本書はDevices and Sensors Working Groupによって 勧告プロセスを用いて作業草案として公開されました。
作業草案として公開された文書は、W3Cおよびそのメンバーによる承認を意味するものではありません。
本書はドラフト文書であり、いつでも更新・置換・廃止される可能性があります。進行中の作業以外の目的で本書を引用することは適切ではありません。
本書は W3C 特許ポリシーの下で活動するグループによって作成されました。 W3Cは、グループの成果物に関連する公開特許開示リストを管理しています。 そのページには特許開示の手続きも記載されています。個人が本仕様に関連する 必須請求項 を含む特許について知っている場合は、 W3C特許ポリシー第6節 に従い開示する必要があります。
本書は 2023年11月3日W3Cプロセス文書に従って管理されています。
このセクションは非規範的です。
Battery Status API仕様は、ウェブ開発者がホストデバイスのバッテリー状態をプログラムで取得する手段を定義します。 デバイスのバッテリー状態が分からない場合、ウェブ開発者は十分なバッテリーレベルを前提としてウェブアプリケーションを設計する必要があります。 そのため、バッテリー状態に基づいて判断できないことで、デバイスのバッテリーが期待よりも早く消耗してしまう可能性があります。 バッテリー状態の情報があれば、ウェブ開発者は省電力なウェブコンテンツやアプリケーションを作成でき、ユーザー体験の向上につながります。 ただし、このAPIの単純な実装はバッテリー寿命に悪影響を及ぼす可能性があることに注意してください。
Battery Status APIは、デバイスが充電中でない場合やバッテリー残量が少ない場合に、作業を遅延または縮小するために利用できます。 例えば、高度なウェブアプリケーションの典型例であるウェブメールクライアントは、デバイスが充電中であれば数秒ごとに新着メールをサーバーに問い合わせますが、充電していない場合やバッテリー残量が少ない場合は問い合わせ頻度を減らします。 また、ウェブベースのワープロでは、バッテリー切れによるデータ損失を防ぐために、バッテリー残量を監視してバッテリーがなくなる前に変更内容を保存できます。
非規範的と記載されたセクションのほか、著作ガイドライン、図、例、注記はすべて非規範的です。それ以外はすべて規範的です。
本書におけるMAY、MUST、SHOULDなどのキーワードは、 BCP 14 [RFC2119] [RFC8174] に記載されているとおり、ここに示すようにすべて大文字で現れる場合のみ適用されます。
本仕様は、含まれるインターフェースを実装する単一の製品、すなわちユーザーエージェントに適合性基準を定義します。
本仕様で定義されるAPIは、ホストデバイスのバッテリー状態を取得するために利用されます。
ユーザーエージェントは、バッテリー状態情報の高精度な読み取り値を公開すべきではありません。これは新たなフィンガープリンティングベクトルとなる可能性があるためです。
ユーザーエージェントは、ユーザーにバッテリー状態情報へのアクセスを求めてもよく、あるいはプライベートブラウジングモードではユーザー権限要件を強制してもよいです。
ユーザーエージェントは、スクリプトによるAPI利用を目立たない方法でユーザーに通知し、透明性を高めるとともに、ユーザーがAPIアクセスを取り消せるようにすべきです。
ユーザーエージェントは、ホストデバイスにバッテリーがない・充電中である・偽の値を公開しているかどうかを著者が直接知ることができないよう、公開値を難読化してもよいです。
本仕様で言及されるタスクソースは、バッテリーステータスタスクソースです。
WebIDL[SecureContext, Exposed=Window]
interface BatteryManager
: EventTarget {
readonly attribute boolean charging
;
readonly attribute unrestricted double chargingTime
;
readonly attribute unrestricted double dischargingTime
;
readonly attribute double level
;
attribute EventHandler onchargingchange
;
attribute EventHandler onchargingtimechange
;
attribute EventHandler ondischargingtimechange
;
attribute EventHandler onlevelchange
;
};
BatteryManager
インターフェイスは、ホストデバイスの 現在のバッテリー状態情報
を表します。
ユーザーエージェントは、何らかの属性値を報告できない場合、例えばユーザーやシステムの設定、制限などにより、バッテリー状態情報を報告できないとされます。
BatteryManager
インスタンスは、以下の 内部スロット を持って作成されます:
内部スロット | 初期値 |
---|---|
[[Charging]] |
true
|
[[ChargingTime]] | 0 |
[[DischargingTime]] | 正の無限大 |
[[Level]] | 1.0 |
[[Charging]]
内部スロットは、システムバッテリーの充電状態を表します。バッテリーが放電中の場合は false
に、充電中の場合、状態を報告できない場合、バッテリーがシステムに接続されていない場合、その他の場合は true
に設定 しなければならない 。
システムバッテリーの充電状態が変化したとき、ユーザーエージェントは バッテリー状態を更新して通知 アルゴリズムを、[[Charging]]
、true
または
false
(充電か放電か)、および "chargingchange
"
を用いて実行しなければなりません。
[[ChargingTime]]
内部スロットは、システムバッテリーがフル充電になるまでの残り時間(秒)を表します。バッテリーが満タンの場合やバッテリーが接続されていない場合は 0
に、放電中の場合、残り充電時間を報告できない場合、その他の場合は正の無限大に設定 しなければならない 。
バッテリーの充電時間が更新された際、ユーザーエージェントは バッテリー状態を更新して通知 アルゴリズムを、[[ChargingTime]]
、新しい充電時間(秒)、および "chargingtimechange
" を用いて実行します。
[[DischargingTime]]
属性は、システムバッテリーが完全に放電し、システムがサスペンドされるまでの残り時間(秒)を表します。バッテリーが充電中の場合、残り放電時間を報告できない場合、バッテリーが接続されていない場合、その他の場合は正の無限大に設定
しなければならない 。
バッテリーの放電時間が更新された際、ユーザーエージェントは バッテリー状態を更新して通知 アルゴリズムを、[[DischargingTime]]
、新しい放電時間(秒)、および "dischargingtimechange
" を用いて実行します。
[[Level]]
内部スロットは、システムバッテリーのレベルを表します。バッテリーが枯渇しシステムがサスペンド直前の場合は 0 に、バッテリーが満タンの場合、レベルを報告できない場合、バッテリーが接続されていない場合は
1.0 に設定 しなければならない 。
バッテリーレベルが更新された際、ユーザーエージェントは バッテリー状態を更新して通知
アルゴリズムを、[[Level]]
、新しいバッテリーレベル、および "levelchange
" を用いて実行します。
"chargingtimechange
"、"dischargingtimechange
"、および "levelchange
" イベントがどのくらいの頻度で発火されるかは実装に委ねられています。
charging
の getter 手順は、this.[[Charging]]
を返します。
chargingTime
の getter 手順は、this.[[ChargingTime]]
を返します。
dischargingTime
の getter 手順は、this.[[DischargingTime]]
を返します。
以下は、イベントハンドラ(および対応する イベントハンドライベントタイプ)であり、BatteryManager
オブジェクトの属性として サポートしなければならない ものです:
イベントハンドラ | イベントハンドライベントタイプ |
---|---|
onchargingchange
|
chargingchange
|
onchargingtimechange
|
chargingtimechange
|
ondischargingtimechange
|
dischargingtimechange
|
onlevelchange
|
levelchange
|
内部スロット slot、value、および eventName を受け取り、バッテリー状態を更新して通知 するには、以下の手順を実行します:
Window
でない場合、この手順を中止します。
Navigator
とします。
[[BatteryManager]]
とします。
null
の場合、この手順を中止します。
ホストデバイスに複数のバッテリーが含まれる場合、BatteryManager
はバッテリーの統合ビューを
提供すべき です。
[[Charging]]
内部スロットは、少なくとも1つのバッテリーの充電状態が true の場合は true
に、それ以外は false に設定 しなければならない 。
[[ChargingTime]]
内部スロットは、並列充電の場合は個々のバッテリーの最大充電時間、直列充電の場合は個々の充電時間の合計に設定できます。
[[DischargingTime]]
内部スロットは、並列放電の場合は個々のバッテリーの最大放電時間、直列放電の場合は個々の放電時間の合計に設定できます。
[[Level]]
内部スロットは、同容量のバッテリーの場合はレベルの平均値、容量が異なるバッテリーの場合は容量加重平均に設定できます。
Battery Status APIは、文字列 "battery
" で識別される ポリシー管理機能です。その デフォルト許可リストは
'self'
です。
このセクションは規範的ではありません。
この簡単な例では、レベルが変化するたびにバッテリーレベルをコンソールに出力します。
// Promiseが解決された時点で初期値を取得...
navigator.getBattery().then(function(battery) {
console.log(battery.level);
// ...そして以降の更新も取得
battery.onlevelchange = function() {
console.log(this.level);
};
});
また、addEventListener()
メソッドを使った同様の例です:
navigator.getBattery().then(function(battery) {
console.log(battery.level);
battery.addEventListener('levelchange', function() {
console.log(this.level);
});
});
次の例は、充電状態・レベル・残り時間(分)をインジケーターに表示するものです:
<!DOCTYPE html>
<html>
<head>
<title>Battery Status API 例</title>
<script>
window.onload = function () {
function updateBatteryStatus(battery) {
document.querySelector('#charging').textContent = battery.charging ? '充電中' : '未充電';
document.querySelector('#level').textContent = battery.level;
document.querySelector('#dischargingTime').textContent = battery.dischargingTime / 60;
}
navigator.getBattery().then(function(battery) {
// Promiseが解決された時点でバッテリー状態を更新
updateBatteryStatus(battery);
// 以降の更新にも対応
battery.onchargingchange = function () {
updateBatteryStatus(battery);
};
battery.onlevelchange = function () {
updateBatteryStatus(battery);
};
battery.ondischargingtimechange = function () {
updateBatteryStatus(battery);
};
});
};
</script>
</head>
<body>
<div id="charging">(充電状態不明)</div>
<div id="level">(バッテリーレベル不明)</div>
<div id="dischargingTime">(放電時間不明)</div>
</body>
</html>
BatteryManager
インターフェイス
§6.
[[BatteryManager]]
Navigator
の内部スロット
§5.1
[[BatteryPromise]]
Navigator
の内部スロット
§5.1
charging
BatteryManager
の属性
§6.2
[[Charging]]
BatteryManager
の内部スロット
§6.1
chargingTime
BatteryManager
の属性
§6.3
[[ChargingTime]]
BatteryManager
の内部スロット
§6.1
dischargingTime
BatteryManager
の属性
§6.4
[[DischargingTime]]
BatteryManager
の内部スロット
§6.1
getBattery()
Navigator
のメソッド
§5.2
level
BatteryManager
の属性
§6.5
[[Level]]
BatteryManager
の内部スロット
§6.1
onchargingchange
BatteryManager
の属性
§6.6
onchargingtimechange
BatteryManager
の属性
§6.6
ondischargingtimechange
BatteryManager
の属性
§6.6
onlevelchange
BatteryManager
の属性
§6.6
EventTarget
インターフェイス
EventHandler
Window
インターフェイス
boolean
型
DOMException
インターフェイス
double
型
[Exposed]
拡張属性
NotAllowedError
例外
Promise
インターフェイス
[SecureContext]
拡張属性
unrestricted double
型
WebIDL[SecureContext]
partial interface Navigator {
Promise<BatteryManager
> getBattery
();
};
[SecureContext, Exposed=Window]
interface BatteryManager
: EventTarget {
readonly attribute boolean charging
;
readonly attribute unrestricted double chargingTime
;
readonly attribute unrestricted double dischargingTime
;
readonly attribute double level
;
attribute EventHandler onchargingchange
;
attribute EventHandler onchargingtimechange
;
attribute EventHandler ondischargingtimechange
;
attribute EventHandler onlevelchange
;
};
本グループは、プロトタイプ実装に基づく貴重なフィードバックを提供してくれたMounir Lamouri氏、Jonas Sicking氏、そしてMozilla WebAPIチーム全体に深く感謝します。System Information APIやDevice Orientation Event仕様の関係者にも初期の着想を得たことに感謝します。また、Page Visibility仕様の推進者の皆さんにも、導入章の執筆動機となる実際の高付加価値ユースケースについて編集者に気付きを与えてくれたことに感謝します。Device APIs Working Groupの参加者や、実質的なフィードバックやコメントを寄せてくださった皆様にも特別な謝意を表します。そのおかげでWebがより良いものとなりました。最後に、APIのプライバシー分析に携わったLukasz Olejnik氏、Gunes Acar氏、Claude Castelluccia氏、Claudia Diaz氏にも感謝します。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: