自動再生ポリシー検出

W3C 作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/WD-autoplay-detection-20250904/
最新公開バージョン:
https://www.w3.org/TR/autoplay-detection/
編集者草稿:
https://w3c.github.io/autoplay/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/autoplay-detection/
フィードバック:
GitHub
編集者:
(Mozilla)

概要

この仕様は、ウェブ開発者がメディアファイルの再生を自動的に開始することが、状況に応じて許可されているかどうかを検出する機能を提供します。

この文書のステータス

このセクションは、公開時点における本書の状態について説明します。現在の W3C の出版物およびこの技術報告書の最新改訂版は W3C 標準及び草案一覧 にてご覧いただけます。

この仕様に関するフィードバックやコメントをお待ちしております。 GitHub Issues にてこの仕様について議論することを推奨します。その他、Media Working Groupのメーリングリスト public-media-wg@w3.org (アーカイブ) でもコメントを送信できます。 この草案では、ワーキンググループ内で議論が残っている未解決の課題をハイライトしています。 これらの課題については有効と判断されているかどうかも含めて、まだ決定されていません。

この文書は Media Working Group によって 勧告トラックで作業草案として公開されました。 この文書は W3C 勧告となることを目指しています。

作業草案として公開された文書は W3C およびその会員による承認を意味するものではありません。

この文書は草案であり、随時更新、差替え、または廃止される可能性があります。 進行中の作業以外として本書を引用するべきではありません。

本書は W3C特許ポリシー の下で運営されるグループによって作成されました。 W3C は、グループの成果物に関連して行われた 公開特許開示リスト を管理しています。そのページには特許開示の方法も記載されています。 特許の存在を把握した個人は、W3C特許ポリシー第6節に準じて情報を開示する必要があります。

この文書は 2025年8月18日版 W3Cプロセス文書 によって管理されています。

1. 導入

ほとんどのユーザーエージェントは自動再生メディアをブロックする独自のメカニズムを持ち、 それらのメカニズムは実装ごとに異なります。ウェブ開発者は自動再生メディアが許可されているかどうかを検出し、 代替コンテンツの選択やメディアが自動再生されない場合のユーザー体験向上のための対応が必要です。 例えば、ユーザーエージェントが聞こえる自動再生のみをブロックする場合、ウェブ開発者は聞こえるメディアを聞こえないメディアで置き換え、 メディア再生を維持することができます。 もしユーザーエージェントがすべての自動再生メディアを許可しないのであれば、 メディアリソースの読み込みや関連タスクを停止し、ユーザーの帯域幅やCPU消費を軽減できます。

現在、この仕様は HTMLMediaElement (video および audio) と Web Audio API のみを扱います。この仕様は Web Speech API や アニメーション画像 (image、GIFアニメーション) には対応しません。

2. 自動再生検出API

自動再生の検出は Navigator オブジェクトを介して行うことができます。 結果は、指定されたメディアタイプのメディアが document に存在し、 問い合わせた Navigator オブジェクトに関連付けられた Window オブジェクトで自動再生が許可されているか、 または個別の要素で自動再生が許可されているかを知ることができます。

2.1. 自動再生ポリシー列挙型

enum AutoplayPolicy {
  "allowed",
  "allowed-muted",
  "disallowed"
};
列挙値 説明
"allowed" メディアの自動再生が許可されます。
"allowed-muted" 音が出ないメディア の自動再生が許可されます。
注意: この属性は現在、指定されたメディアタイプや要素が HTMLMediaElement または HTMLVideoElementHTMLAudioElement などの拡張の場合のみ返されます。
音が出ないメディア要素 とは、以下のいずれかの条件を持つ HTMLMediaElement です:
  • メディアの volume が 0 である
  • メディアの muted が true である
  • メディアの resource が音声トラックを持たない
"disallowed" いかなるメディアも自動再生は許可されません。
注意: 自動再生ポリシーはユーザーエージェントがメディアの自動再生を許可するかどうかの現在の状態を示しますが、今後変更される可能性があるため、 著者は都度結果を確認するのが推奨されます
ユーザーエージェントが自動再生の許可判定に HTML § 6.4.1 データモデル のユーザーアクティベーションを使い、デフォルトポリシーがすべての自動再生ブロック (disallowed) の場合、 ページやメディアでユーザーが対応するジェスチャーを行うと allowedallowed-muted にポリシーが変化する可能性があります。

2.2. 自動再生検出メソッド

enum AutoplayPolicyMediaType { "mediaelement", "audiocontext" };

[Exposed=Window]
partial interface Navigator {
  AutoplayPolicy getAutoplayPolicy(AutoplayPolicyMediaType type);
  AutoplayPolicy getAutoplayPolicy(HTMLMediaElement element);
  AutoplayPolicy getAutoplayPolicy(AudioContext context);
};
列挙値 説明
mediaelement HTMLMediaElementHTMLVideoElementHTMLAudioElement など拡張用の状態照会に使用します。
audiocontext AudioContext の状態照会に使用します。

2.2.1. メディアタイプによる照会

getAutoplayPolicy(type) メソッドは 概略として document に存在し、 問い合わせた Navigator オブジェクトに関連付けられた Window のメディア要素やオーディオコンテキストが自動再生できるかどうかの状態を返します。 概略とは、同じメディアタイプであってもすべての要素の結果が常に正しいわけではないことを意味します。
注意: 実装によっては、メディアタイプによる照会結果が disallowed でも 一部のメディア が自動再生を許可される場合があります。 この場合、正確な結果を得るためには個々の要素でも照会することが推奨されます
一部ユーザーエージェントは、初期状態ではいかなるメディア要素も自動再生を許可しませんが、 ユーザーによってクリックされたメディア要素は自動再生を許可する場合があります。

例えば、最初はメディアタイプによる照会も、オブジェクトによる照会も disallowed。 その後ユーザーがメディア要素をクリックすると、その要素の照会は allowed となり、 それはユーザーが意図的に操作したと判断されるからですが、 メディアタイプによる照会や他のまだクリックされていないメディア要素の照会は引き続き disallowed となります。

getAutoplayPolicy(type) メソッドが呼ばれた場合、 ユーザーエージェントは以下の手順を実行しなければなりません:

  1. typemediaelement なら、 HTMLMediaElementHTMLVideoElementHTMLAudioElement など拡張が document に存在し、 問い合わせた Navigator オブジェクトに関連付けられた Window オブジェクトの現在の状態を表す結果を返す。
  2. typeaudiocontext なら、 AudioContextdocument に存在し、 問い合わせた Navigator オブジェクトに関連付けられた Window オブジェクトの現在の状態を表す結果を返す。
返値が allowed の場合
指定されたタイプのすべてのメディアが自動再生可能です。
返値が allowed-muted の場合
指定されたタイプのすべての音が出ないメディアは自動再生可能です。
注意: この属性は、指定されたメディアタイプが mediaelement の場合のみ返されます。 "音が出ないメディア" とは 音が出ないメディア要素 のことです。
返値が disallowed の場合
指定されたタイプの いかなるメディアも 自動再生はできません。
注意: 実装によっては、ドキュメントに子ドキュメントがある場合、 親ドキュメントに関連付けられた Navigator オブジェクトで照会した結果と 子ドキュメントの Navigator オブジェクトで照会した結果が異なる場合があります。
例えば、foo.com のトップレベルドキュメント A が allowed で、埋め込みiframeのbar.comのドキュメント B では、 ユーザーエージェントによって 親ドキュメント A の結果を継承する場合もあれば、 異なる結果(例: disallowed) を返す場合もあります。

前者は複雑さを下げ、 自動再生ブロックの挙動を一貫性のあるものにできます。後者はより細かい自動再生制御を実現します。

2.2.2. 要素による照会

getAutoplayPolicy(element) および getAutoplayPolicy(context) メソッドは、指定された要素の自動再生が現在許可されているかどうかの状態を返します。
返値が allowed の場合
この要素は現在の実行コンテキストで自動再生が許可されています。
返値が allowed-muted の場合
この要素は、音が出ない場合にのみ自動再生が許可されます。
注意: この属性は、指定された要素が HTMLMediaElement または HTMLVideoElementHTMLAudioElement などの拡張の場合のみ返されます。"音が出ないメディア"は 音が出ないメディア要素 のことです。

さらに、著者が音が出ないメディア要素を再生開始直後に音が出るようにした場合は、 その要素がもはや音が出ない状態ではなくなるため、ユーザーエージェントはそのメディア要素をすぐに一時停止することが推奨されます。

返値が disallowed の場合
この要素は自動再生が許可されていません。
注意: HTMLMediaElementplay() を実行した場合、 play() から返されるPromiseは NotAllowedError 例外で拒否されます。

AudioContext の場合は、 AudioContextStatesuspended 状態のままになります。

メディアタイプによる照会結果と要素による照会結果が異なる場合、 著者は後者(要素による結果)を正しいものとして扱うべきです。例2にシナリオを示します。

注意: 渡された要素が HTMLMediaElement (または、HTMLVideoElementHTMLAudioElement などの拡張) や AudioContext でない場合は、 これらのメソッドは TypeError を投げます。

3.

メディア要素の自動再生ができるかどうかをチェックする例。
if (navigator.getAutoplayPolicy("mediaelement") === "allowed") {
  // 新しいメディア要素を生成し再生する。
} else if (navigator.getAutoplayPolicy("mediaelement") === "allowed-muted") {
  // 新しいメディア要素を生成し、ミュート再生にする。
} else {
  // 自動再生不可。代わりにポスター画像を表示するなど。
}
オーディオコンテキストが開始可能かどうかのチェック例。 Web Audio では、 sticky activation を使って AudioContext の開始許可を判定します。
if (navigator.getAutoplayPolicy("audiocontext") === "allowed") {
  let ac = new AudioContext();
  ac.onstatechange = function() {
    if (ac.state === "running") {
      // オーディオアプリ開始。
    }
  }
} else {
  // オーディオコンテキストは開始不可。UI表示でユーザーに開始操作を促す。ac.resume()ハンドラから実行し、'onstatechange'で準備完了を検知。
}
特定のメディア要素による照会例。
function handlePlaySucceeded() {
  // コントロールUIを再生中に更新。
}
function handlePlayFailed() {
  // ユーザーが明示的に動画を再生できるボタン表示 & 画像ポスターで動画を置換表示。
}

let video = document.getElementById("video");
switch (navigator.getAutoplayPolicy(video)) {
  case "allowed":
    video.src = "video.webm";
    video.play().then(handlePlaySucceeded, handlePlayFailed);
    break;
  case "allowed-muted":
    video.src = "video.webm";
    video.muted = true;
    video.play().then(handlePlaySucceeded, handlePlayFailed);
    break;
  default:
    // 自動再生不可。リソースダウンロード不要。
    handlePlayFailed();
    break;
}
特定のオーディオコンテキストによる照会例。 Web Audio では sticky activation を使って AudioContext の開始許可を判定します。
let ac = new AudioContext();
if (navigator.getAutoplayPolicy(ac) === "allowed") {
  ac.onstatechange = function() {
    if (ac.state === "running") {
      // オーディオアプリ開始。
    }
  }
} else {
  // UIでユーザーにアプリ開始操作を促す。ac.resume()ハンドラから実行、'onstatechange'でスタック準備完了検知。
}

4. セキュリティとプライバシーの考慮事項

自己レビュー質問票: セキュリティとプライバシー § questions に準拠。

この仕様で導入されるAPIは、セキュリティおよびプライバシーへの影響が非常に低いです。 ユーザーの識別に使えるような機微情報は公開しません。 センサーやユーザーの端末の制御機能も公開しません。 オリジンに対して、ブラウズセッションをまたいで記憶される新たな状態の導入はありません。 オリジンが基盤プラットフォームにデータ送信することもできません。 新たなスクリプト実行やロード機構も導入・有効化しません。 オリジンがユーザーエージェントのネイティブUIに重ね描画することもありません。 オリジンがユーザーのプライベート閲覧か非プライベートかを検知することもありません。

5. 謝辞

この仕様は W3C media Working Group の協働による成果です。

編者はこの仕様への貢献者として Alastor Wu, Becca Hughes, Christoph Guttandin, Chris Needham, Chris Pearce, Dale Curtis, Eric Carlson, François Daoust, Frank Liberato, Gary Katsevman, Jean-Yves Avenard, Jer Noble, Mattias Buelens, Mounir Lamouri, Paul Adenot および Tom Jenkinson に感謝します。

適合性

文書規約

適合性要件は、記述的なアサーションとRFC 2119の用語を組み合わせて表現されます。 「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」といったキーワードは この文書の規範的部分においてRFC 2119で記載されたとおりに解釈されます。 ただし、可読性のため、これらの単語は本仕様ではすべて大文字では表記されません。

この仕様の本文は、明示的に非規範であるとされたセクション、例、注記を除き、すべて規範的です。[RFC2119]

この仕様の例は「for example」で始まるか、class="example"で規範テキストから分離して示されます。例えば次のようになります:

これは情報的な例です。

情報的な注記は「Note」で始まり、class="note"で規範テキストから分離して示されます。例えば次のようになります:

Note, これは情報的な注記です。

適合するアルゴリズム

アルゴリズムの一部として命令形で記載された要件(例:「先頭の空白文字を除去」や「falseを返して手順を中断」など)は、アルゴリズムの導入部で使われているキーワード ("must", "should", "may" など)の意味で解釈されます。

アルゴリズムや特定ステップとして記述された適合性要件は、最終結果が同等であれば、どのような方法で実装しても構いません。 特に、この仕様で定義されるアルゴリズムは理解しやすいことを目的としており、性能面は意図されていません。 実装者は最適化を奨励します。

索引

この仕様で定義されている用語

参照で定義されている用語

参考文献

規範参考文献

[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SECURITY-PRIVACY-QUESTIONNAIRE]
Theresa O'Connor; Peter Snyder; Simone Onofri. Self-Review Questionnaire: Security and Privacy. 2025年4月18日. NOTE. URL: https://www.w3.org/TR/security-privacy-questionnaire/
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018年10月4日. CR. URL: https://www.w3.org/TR/SVG2/
[WEBAUDIO]
Paul Adenot; Hongchan Choi. Web Audio API. 2021年6月17日. REC. URL: https://www.w3.org/TR/webaudio-1.0/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考参考文献

[SPEECH-API]
Web Speech API. Draft Community Group Report. URL: https://webaudio.github.io/web-speech-api/

IDL索引

enum AutoplayPolicy {
  "allowed",
  "allowed-muted",
  "disallowed"
};

enum AutoplayPolicyMediaType { "mediaelement", "audiocontext" };

[Exposed=Window]
partial interface Navigator {
  AutoplayPolicy getAutoplayPolicy(AutoplayPolicyMediaType type);
  AutoplayPolicy getAutoplayPolicy(HTMLMediaElement element);
  AutoplayPolicy getAutoplayPolicy(AudioContext context);
};