Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この仕様は、Webコンテンツがプレゼンテーションディスプレイへアクセスし、それらを使ってWebコンテンツを表示できるAPIを定義します。
このセクションは、公開時点でのこの文書のステータスを説明します。現行のW3C公開文書および本技術レポートの最新版は、W3C技術レポート一覧(https://www.w3.org/TR/)に掲載されています。
この文書は、Second Screen Working Groupによって 勧告トラックを用いた候補勧告ドラフトとして公開されました。
2017年6月1日に候補勧告として公開されて以降、ワーキンググループはPresentationRequestの構築手順を更新し、サポートされていないスキームのURLを無視するようにし、受信側のブラウジングコンテキストのナビゲーション方法にさらなる制限を加え、BinaryType列挙型の定義をHTML仕様のものに統合しました。本書で定義されている他のインターフェースは、WebIDLの更新に合わせて調整された以外に変更はありません。その他、様々な明確化や編集上の更新も行われました。詳細は変更点一覧をご覧ください。
リスクがあると特定された機能はありません。
Second Screen Working Groupは、候補勧告期間中にPresentation APIのテストスイートを改善し、暫定実装報告を更新します。本仕様が提案勧告へ進むためには、各機能について2つの独立した相互運用可能な実装が示される必要があります。詳細は候補勧告終了基準のセクションをご覧ください。
候補勧告として公開されたことは、W3Cおよびそのメンバーによる支持を意味するものではありません。候補勧告ドラフトは、前回の候補勧告からワーキンググループが次回の候補勧告スナップショットへ含めようとする変更を統合したものです。
この文書はドラフトであり、随時更新、置換、廃止される可能性があります。本書を進行中の作業以外として引用することは不適切です。
この文書は W3C 特許ポリシー の下で活動するグループによって作成されました。 W3Cは、 本グループ成果物に関連する特許開示の公開リスト を管理しています。また、そのページには特許開示の手順も記載されています。特許にEssential Claim(s)が含まれていると信じる個人は、 W3C特許ポリシー第6節 に従い情報を開示する必要があります。
この文書は、 2023年11月3日 W3Cプロセス文書 に従って管理されています。
このセクションは規定ではありません。
Presentation APIは、プロジェクター、接続されたモニター、ネットワーク接続されたテレビなどのプレゼンテーションディスプレイをWebで利用可能にすることを目的としています。HDMI、DVIなどの有線技術、およびMiracast、Chromecast、DLNA、AirPlayなどの無線技術で接続されたディスプレイを考慮しています。
画面サイズが限られているデバイスでは、Webコンテンツを大勢に見せることができません。例えば会議室の同僚グループや家庭の友人・家族などです。より大きなプレゼンテーションディスプレイでWebコンテンツを表示すると、より高い品質、読みやすさ、インパクトが得られます。
Presentation APIの基本機能は、コントローラーページがプレゼンテーションページをプレゼンテーションディスプレイで表示し、メッセージをやり取りできるようにすることです。プレゼンテーションページをディスプレイに送信する方法や、コントローラーページとその間でメッセージを交換する方法は実装に委ねられています。これにより、さまざまなディスプレイ技術の利用が可能になります。
例えば、プレゼンテーションディスプレイがHDMIやMiracastで接続され、音声と映像のみ送信可能な場合、コントローラーをホストするユーザーエージェント(UA)はプレゼンテーションも描画します。そして、そのグラフィック出力と音声出力をOS経由でプレゼンテーションディスプレイに送ります。この状況をPresentation APIの1-UAモード実装と呼びます。必要なのは、ユーザーエージェントがプレゼンテーションの描画から得られたグラフィック・音声をプレゼンテーションディスプレイに送信し、コントローラーページとプレゼンテーションページの間で内部的にメッセージを交換できることだけです。
プレゼンテーションディスプレイがネイティブでHTMLをレンダリングでき、コントローラーとネットワーク通信できる場合、コントローラーをホストするユーザーエージェントはプレゼンテーションのレンダリングを行う必要はありません。ユーザーエージェントはプロキシとして動作し、プレゼンテーションディスプレイにプレゼンテーションページのロード・レンダリングを依頼します。メッセージ交換はユーザーエージェントとプレゼンテーションディスプレイ間のネットワーク接続で行われます。この状況をPresentation APIの2-UAモード実装と呼びます。
Presentation APIは、ユーザーエージェントがプレゼンテーションディスプレイに1-UAモード、2-UAモード、および他の方法で接続する場合の利用を想定しています。ユーザーエージェントとプレゼンテーションディスプレイ間の相互運用性を高めるために、ブラウザとディスプレイ間のネットワーク通信の標準化がSecond Screen Community Groupで検討されています。
このセクションは規定ではありません。
ユースケースと要件は、別途用意されたPresentation API ユースケースと要件文書にまとめられています。
規定ではない部分としてマークされたセクションに加え、この仕様書内のすべての著作ガイドライン、図、例、注記は規定ではありません。それ以外の内容はすべて規定です。
この文書における MAY、MUST、MUST NOT、OPTIONAL、SHOULD、SHOULD NOT というキーワードは、すべて大文字で現れた場合のみ、BCP 14 [RFC2119] および [RFC8174] に記載された通りに解釈されます。
アルゴリズムの一部として命令形で書かれた要件(例:「先頭のスペース文字を除去する」や「falseを返してこの手順を終了する」など)は、アルゴリズムの導入部分で使われているキーワード("MUST"、"SHOULD"、"MAY"など)の意味で解釈してください。
アルゴリズムや具体的な手順として表現された適合要件は、結果が同等であればどのような方法で実装しても構いません。(特に、本仕様で定義されているアルゴリズムは理解しやすさを重視しており、性能を意図したものではありません。)
この仕様では、2種類のユーザーエージェントの適合性基準を記述しています。
制御側ユーザーエージェントの仕様に準拠したWebブラウザは、本仕様で記述されているように制御側ブラウジングコンテキストを提供することで、プレゼンテーションの開始・制御ができなければなりません。このコンテキストは、Presentation、PresentationAvailability、PresentationConnection、PresentationConnectionAvailableEvent、PresentationConnectionCloseEvent、および
PresentationRequestインターフェースを実装します。
受信側ユーザーエージェントの仕様に準拠したWebブラウザは、本仕様で記述されているように受信側ブラウジングコンテキストを提供することで、プレゼンテーションを描画できなければなりません。このコンテキストは、Presentation、PresentationConnection、PresentationConnectionAvailableEvent、PresentationConnectionCloseEvent、PresentationConnectionList、および
PresentationReceiverインターフェースを実装します。
1つのユーザーエージェントが、制御側ユーザーエージェントと受信側ユーザーエージェントの両方として動作する場合もあります。両方のブラウジングコンテキストを提供し、それぞれに必要なインターフェースを実装している場合です。これは、同じユーザーエージェントが制御側ブラウジングコンテキストと受信側ブラウジングコンテキストの両方をホストできる場合、つまりAPIの1-UAモード実装で発生します。
ユーザーエージェントに対して記述された適合要件は、文脈により制御側ユーザーエージェント、受信側ユーザーエージェント、または両方に適用されます。
JavaScriptレルムおよび現在のレルムという用語は、[ECMASCRIPT]で定義されています。resolve済みおよびreject済みという用語は、Promiseオブジェクトの文脈で[ECMASCRIPT]で定義されています。
Accept-Languageおよび HTTP認証という用語は、[RFC9110]で定義されています。
Cookieストアという用語は、[RFC6265]で定義されています。
UUIDという用語は、[RFC4122]で定義されています。
ドキュメントのリロードは、
reload()メソッドが呼び出されたときに実行される手順を指します([HTML])。
ローカルストレージ領域は、localStorage
属性によって公開されるストレージ領域を指します。同様に、セッションストレージ領域は、sessionStorage
属性で公開される領域を指します([HTML])。
この仕様は他の仕様からエクスポートされた用語を参照しています。B.2 参照先で定義された用語を参照してください。また、他の仕様から以下の内部概念も引用しています。
このセクションは規定ではありません。
このセクションでは、Presentation
APIの主な機能の使い方を示すコード例を紹介します。これらの例では、controller.htmlがコントローラーを、presentation.htmlがプレゼンテーションを実装しています。両ページはhttps://example.org(https://example.org/controller.htmlとhttps://example.org/presentation.html)のドメインから配信されます。これらの例は、制御ページが一度に1つのプレゼンテーションを管理することを前提としています。詳細はコード例内のコメントを参照してください。
このコードは、https://example.com/presentation.html または
https://example.net/alternate.htmlを表示できる互換性のあるプレゼンテーションディスプレイが1台以上ある場合にボタンを表示します。
ディスプレイの利用可能状況の監視は、まず提示したいURLでPresentationRequestを作成し、getAvailabilityを呼び出して、プレゼンテーションの可用性が変化したときにchangeイベントが発火するPresentationAvailabilityオブジェクトを取得します。
<!-- controller.html -->
<button id="presentBtn" style="display: none;">Present</button>
<script>
// プレゼンテーションディスプレイが1つ以上利用可能な場合Presentボタンを表示
var presentBtn = document.getElementById("presentBtn");
// 相対パスのプレゼンテーションURL(例:"presentation.html")も利用可能
var presUrls = ["https://example.com/presentation.html",
"https://example.net/alternate.html"];
// ディスプレイの利用可能状況に応じてPresentボタン表示/非表示切替
var handleAvailabilityChange = function(available) {
presentBtn.style.display = available ? "inline" : "none";
};
// Promiseはプレゼンテーションディスプレイの利用可能状況が判明次第resolveされる
var request = new PresentationRequest(presUrls);
request.getAvailability().then(function(availability) {
// availability.valueはavailabilityオブジェクトが生存している限り制御UAで最新状態が維持される場合がある。
// Web開発者は不要になったらオブジェクトを破棄することが推奨される。
handleAvailabilityChange(availability.value);
availability.onchange = function() { handleAvailabilityChange(this.value); };
}).catch(function() {
// プラットフォームが可用性監視をサポートしていない場合、presentation displaysの発見はrequest.start()呼び出し後にのみ行われる。
// 簡単のためデバイスが利用可能とみなす。あるいはボタン用に第3状態を実装してもよい。
handleAvailabilityChange(true);
});
</script>
ユーザーがpresentBtnをクリックすると、このコードはPresentationRequest内のURLのいずれかの表示をリクエストします。startが呼び出されると、ブラウザは通常、利用可能な互換ディスプレイの中からユーザーが選択できるダイアログを表示します。選択されたディスプレイと互換性のあるPresentationRequestの最初のURLがそのディスプレイで表示されます。
startメソッドは、プレゼンテーションの状態追跡や、表示された後のプレゼンテーションページとのメッセージ交換に使うPresentationConnectionオブジェクトでresolveされます。
<!-- controller.html -->
<script>
presentBtn.onclick = function () {
// 新しいプレゼンテーションを開始
request.start()
// プレゼンテーションへの接続が成功するとsetConnectionに渡される
.then(setConnection);
// 失敗時はユーザーが選択ダイアログをキャンセルしたか、画面が見つからない等
};
</script>
プレゼンテーションは、開始した元ページがPresentationConnectionを閉じたり、ナビゲートしたり、閉じても継続して実行されます。別のページはidを使って既存のPresentationConnectionに再接続し、制御を再開できます。これは、プレゼンテーションを開始したのと同じブラウザでのみ保証されます。
<!-- controller.html -->
<button id="reconnectBtn" style="display: none;">Reconnect</button>
<script>
var reconnect = function () {
// localStorageからpresIdを取得(あれば)
var presId = localStorage["presId"];
// presIdは再接続時に必須
if (!!presId) {
request.reconnect(presId)
// プレゼンテーションへの新しい接続が成功するとsetConnectionに渡される
.then(setConnection);
// presUrlとpresIdで接続が見つからない、またはエラーが発生した場合
}
};
// コントローラーがナビゲートされたら自動再接続
document.addEventListener("DOMContentLoaded", reconnect);
// あるいは手動で再接続
const reconnectBtn = document.querySelector("#reconnectBtn");
reconnectBtn.onclick = reconnect;
</script>
一部のブラウザは、ユーザーが制御ページを直接操作せずにプレゼンテーションを開始する方法を備えています。制御ページはdefaultRequestプロパティをnavigator.presentationに設定し、こうして開始されたプレゼンテーション時に発火するconnectionavailableイベントを監視することで、この動作を選択できます。イベントで渡されるPresentationConnectionは、ページがstartを呼び出した場合と同様に動作します。
<!-- controller.html -->
<!-- presentation.defaultRequestを設定すると、制御UAがプレゼンテーションを開始する際に使用するPresentationRequestを指定できる -->
<script>
navigator.presentation.defaultRequest = new PresentationRequest(presUrls);
navigator.presentation.defaultRequest.onconnectionavailable = function(evt) {
setConnection(evt.connection);
};
</script>
プレゼンテーションが開始されると、返されたPresentationConnectionが状態監視やメッセージ交換に使われます。通常、制御ページ上でユーザーはプレゼンテーションとの接続解除や終了を選択できます。
制御ページは生存期間中に複数のプレゼンテーションへ接続・切断される可能性があるため、現在のPresentationConnectionとその状態を管理すると便利です。メッセージ送受信は、接続がconnected状態のときのみ可能です。
<!-- controller.html -->
<button id="disconnectBtn" style="display: none;">Disconnect</button>
<button id="stopBtn" style="display: none;">Stop</button>
<script>
let connection;
// DisconnectとStopボタンは接続中プレゼンテーションがある場合に表示
const stopBtn = document.querySelector("#stopBtn");
const disconnectBtn = document.querySelector("#disconnectBtn");
stopBtn.onclick = _ => {
connection && connection.terminate();
};
disconnectBtn.onclick = _ => {
connection && connection.close();
};
function setConnection(newConnection) {
// 再接続でなければ既存プレゼンテーションから切断
if (connection && connection != newConnection && connection.state != 'closed') {
connection.onclose = undefined;
connection.close();
}
// 新しい接続をセットし、プレゼンテーションIDを保存
connection = newConnection;
localStorage["presId"] = connection.id;
function showConnectedUI() {
// ユーザーに切断や終了を許可
stopBtn.style.display = "inline";
disconnectBtn.style.display = "inline";
reconnectBtn.style.display = "none";
}
function showDisconnectedUI() {
disconnectBtn.style.display = "none";
stopBtn.style.display = "none";
reconnectBtn.style.display = localStorage["presId"] ? "inline" : "none";
}
// 接続状態を監視
connection.onconnect = _ => {
showConnectedUI();
// メッセージハンドラ登録
connection.onmessage = message => {
console.log(`Received message: ${message.data}`);
};
// プレゼンテーションページへ初期メッセージ送信
connection.send("Say hello");
};
connection.onclose = _ => {
connection = null;
showDisconnectedUI();
};
connection.onterminate = _ => {
// localStorageからpresIdを削除(あれば)
delete localStorage["presId"];
connection = null;
showDisconnectedUI();
};
};
</script>
このコードは提示ページ(https://example.org/presentation.html)上で実行されます。プレゼンテーションには複数の制御ページから接続されることがあるため、提示ページはconnectionListオブジェクトで着信接続を監視することが重要です。
<!-- presentation.html -->
<script>
var addConnection = function(connection) {
connection.onmessage = function (message) {
if (message.data == "Say hello")
connection.send("hello");
};
};
navigator.presentation.receiver.connectionList.then(function (list) {
list.connections.map(function (connection) {
addConnection(connection);
});
list.onconnectionavailable = function (evt) {
addConnection(evt.connection);
};
});
</script>
<!-- controller.html -->
<script>
connection.send('{"string": "你好,世界!", "lang": "zh-CN"}');
connection.send('{"string": "こんにちは、世界!", "lang": "ja"}');
connection.send('{"string": "안녕하세요, 세계!", "lang": "ko"}');
connection.send('{"string": "Hello, world!", "lang": "en-US"}');
</script>
<!-- presentation.html -->
<script>
connection.onmessage = function (message) {
var messageObj = JSON.parse(message.data);
var spanElt = document.createElement("SPAN");
spanElt.lang = messageObj.lang;
spanElt.textContent = messageObj.string;
document.body.appendChild(spanElt);
};
</script>
制御ページは、2つの異なるプレゼンテーションディスプレイ上に独立したプレゼンテーションを開始・制御することが可能です。このコードは、上記の例に2つ目のプレゼンテーションを追加する方法を示しています。
<!-- controller.html -->
<!-- 同じ制御ページは、start()を複数回呼ぶことで複数のプレゼンテーションを作成・管理可能 -->
<button id="secondPresentBtn" style="display: none;">Present Again</button>
<script>
var secondPresentBtn = document.getElementById("secondPresentBtn");
var secondPresUrl = "https://example.com/second-presentation.html";
var secondRequest = new PresentationRequest(secondPresUrl);
// 簡単のため、secondRequestのスクリーン利用可能状況の監視とsecondPresentBtnの状態更新ロジックは省略
secondPresentBtn.onclick = function () {
// 新しいプレゼンテーションを開始(通常は最初のrequestとは異なる画面)
//
secondRequest.start().then(setSecondConnection);
};
function setSecondConnection(newConnection) {
// second-presentation.htmlとのメッセージのやり取り処理
};
</script>
プレゼンテーションディスプレイは、ユーザーエージェントが実装固有の接続技術を介して利用可能なグラフィックまたは音声出力デバイスを指します。
プレゼンテーション接続は 制御側ブラウジングコンテキストと その受信側ブラウジングコンテキストを関連付けるオブジェクトであり、 両者間の双方向メッセージ通信を可能にします。各プレゼンテーション接続は、 プレゼンテーション接続状態、 他のプレゼンテーションと区別するための一意な プレゼンテーション識別子、 そしてプレゼンテーションの作成または再接続時に使用される プレゼンテーションURL(URL)を持ちます。 有効なプレゼンテーション識別子は、英数字のみで構成され、16文字以上である必要があります。
一部のプレゼンテーションディスプレイは、機能・セキュリティ・ハードウェアの制約によりWebコンテンツの一部しか表示できない場合があります。例としては、セットトップボックス、スマートテレビ、音声のみレンダリング可能なネットワークスピーカーなどです。このようなディスプレイが、制御側ユーザーエージェントによって、そのURLの表示が確実に成功すると合理的に保証できる場合、そのディスプレイはそのプレゼンテーションURLに対する利用可能なプレゼンテーションディスプレイと呼びます。
制御側ブラウジングコンテキスト(略してコントローラー)は、ブラウジングコンテキストであり、startやreconnectの呼び出し、またはconnectionavailableイベントを受け取ることでプレゼンテーションに接続されます。PresentationRequestのアルゴリズムでは、制御側ブラウジングコンテキストは、そのJavaScriptレルムによりPresentationRequestが構築されたブラウジングコンテキストです。
受信側ブラウジングコンテキスト(略してプレゼンテーション)は、プレゼンテーションディスプレイへのレンダリングを担当するブラウジングコンテキストです。受信側ブラウジングコンテキストは、制御側ブラウジングコンテキストと同じユーザーエージェント内、または異なるユーザーエージェント内にも存在し得ます。受信側ブラウジングコンテキストは、受信側ブラウジングコンテキストを作成する手順に従って作成されます。
手続きにおいて、宛先ブラウジングコンテキストは、手続きが制御側ブラウジングコンテキストで開始された場合は受信側ブラウジングコンテキストを、受信側ブラウジングコンテキストで開始された場合は制御側ブラウジングコンテキストを指します。
管理中プレゼンテーションの集合は、初期値は空であり、制御側ブラウジングコンテキストが制御側ユーザーエージェント(またはそのユーザープロファイル)で作成したプレゼンテーション接続を含みます。管理中プレゼンテーションの集合は、基礎となるプレゼンテーション接続を表すPresentationConnectionオブジェクトのリストとして表現されます。この集合内で、同じプレゼンテーションURLとプレゼンテーション識別子を共有するPresentationConnectionオブジェクトが複数存在する場合がありますが、特定の制御側ブラウジングコンテキストに対しては、特定のプレゼンテーションURLとプレゼンテーション識別子を持つPresentationConnectionは1つのみです。
プレゼンテーションコントローラーの集合は、初期値は空であり、受信側ブラウジングコンテキストが受信側ユーザーエージェントで作成したプレゼンテーション接続を含みます。プレゼンテーションコントローラーの集合は、基礎となるプレゼンテーション接続を表すPresentationConnectionオブジェクトのリストとして表現されます。この集合内のすべてのプレゼンテーション接続は、同じプレゼンテーションURLとプレゼンテーション識別子を共有します。
受信側ブラウジングコンテキストでは、プレゼンテーションコントローラー監視器(初期値はnull)が、現在のプレゼンテーションコントローラーの集合を受信側アプリケーションに公開します。プレゼンテーションコントローラー監視器は、PresentationConnectionListとして表現されます。
受信側ブラウジングコンテキストでは、プレゼンテーションコントローラーPromise(初期値はnull)が、初回のプレゼンテーション接続が確立された後にプレゼンテーションコントローラー監視器を提供します。プレゼンテーションコントローラーPromiseは、Promiseとして表現され、プレゼンテーションコントローラー監視器でresolveされます。
制御側ブラウジングコンテキストでは、デフォルトプレゼンテーションリクエスト(初期値はnull)が、ユーザーがブラウザのクロムからプレゼンテーション接続を開始したい場合に使用されるリクエストを表します。
この仕様で言及されるタスクのタスクソースは、プレゼンテーションタスクソースです。
アルゴリズムがPresentation APIタスクTをキューに入れる場合、ユーザーエージェントはMUST、グローバルタスクTを、プレゼンテーションタスクソース上に、グローバルオブジェクト(現在のレルム)を使ってキューに入れなければなりません。
特に指定がない限り、アルゴリズム手順で構築されるスクリプトオブジェクトのJavaScriptレルムは、現在のレルムです。
WebIDL
[SecureContext, Exposed=Window]
interface Presentation {
};
presentation 属性は
Presentation インターフェースのインスタンスを取得するために使用します。必ず MUST
Presentation インスタンスを返します。
制御側ユーザーエージェント はMUST 次のpartial interfaceを実装しなければなりません:
WebIDLpartial interface Presentation {
attribute PresentationRequest? defaultRequest;
};
defaultRequest 属性は
MUST
デフォルトプレゼンテーションリクエストが設定されている場合はそれを返し、
そうでなければ null を返します。設定時には、デフォルトプレゼンテーションリクエストを新しい値に必ず MUST 設定しなければなりません。
制御側ユーザーエージェントは、SHOULD ユーザーがブラウザのクロムでボタンをクリックするなど、ユーザー操作によって意図が示された時のみ デフォルトプレゼンテーションリクエストを使用してプレゼンテーションを開始するべきです。
デフォルトプレゼンテーションリクエストを使ってプレゼンテーションを開始する場合、 制御側ユーザーエージェントは必ず MUST デフォルトプレゼンテーションリクエストからプレゼンテーションを開始する 手順に従う必要があります。
デフォルトプレゼンテーションリクエストによるプレゼンテーション開始のサポートは OPTIONAL です。
defaultRequest
に設定された値を無視するべきです。
受信側ユーザーエージェントは MUST 次のpartial interfaceを実装しなければなりません:
WebIDLpartial interface Presentation {
readonly attribute PresentationReceiver? receiver;
};
receiver
属性は MUST
PresentationReceiver インスタンスを返します。
これは、受信側ブラウジングコンテキストに関連付けられ、
受信側ユーザーエージェントが
受信側ブラウジングコンテキストを
作成したときに生成されます。
その他の ブラウジングコンテキスト
(child navigable を含む)では、必ず MUST null を返します。
Web開発者は navigator.presentation.receiver を利用して、 ドキュメントがプレゼンテーションとしてロードされたかどうかを検出できます。
WebIDL[SecureContext, Exposed=Window]
interface PresentationRequest : EventTarget {
constructor(USVString url);
constructor(sequence<USVString> urls);
Promise<PresentationConnection> start();
Promise<PresentationConnection> reconnect(USVString presentationId);
Promise<PresentationAvailability> getAvailability();
};
PresentationRequest オブジェクトは、
制御側ブラウジングコンテキストによって行われる
プレゼンテーションの開始または再接続リクエストに関連付けられています。PresentationRequest
オブジェクトは MUST
制御側ユーザーエージェントが提供する
制御側ブラウジングコンテキストで実装しなければなりません。
PresentationRequest が構築されるとき、
与えられた urls は MUST
それぞれが PresentationRequest インスタンスの
プレゼンテーションURL となりうる
プレゼンテーションリクエストURL のリストとして使われます。
PresentationRequest の構築
PresentationRequest コンストラクターが呼び出されたとき、
制御側ユーザーエージェントは MUST
以下の手順を実行します:
PresentationRequest オブジェクト
SecurityError
を投げて手順を中断する。
NotSupportedError
を投げて残りの手順を中断する。
SyntaxError
例外で残りの手順を中断する。
NotSupportedError
を投げて残りの手順を中断する。
SecurityError
を投げて手順を中断する。
PresentationRequest オブジェクトを構築し、返す。
start
メソッドが呼び出されたとき、
ユーザーエージェントは MUST 以下の手順で
プレゼンテーションディスプレイの選択 を行います。
PresentationRequest
オブジェクト(startを呼び出したもの)
Promise
Promise を
InvalidAccessError
でrejectし、手順を中断する。
startの呼び出しによる
未解決の Promise がすでに存在する場合、
新しい Promise を
OperationError でrejectし、
残りの手順を中断する。
Promise とする。
NotFoundError
例外でrejectする。
NotAllowedError
例外でrejectし、残りの手順を中断する。
ユーザーがブラウザクロム(専用ボタン、ユーザー操作、その他のシグナルなど)を使ってドキュメントのプレゼンテーションをプレゼンテーションディスプレイで開始する意図を示した場合、そのユーザーエージェントは MUST 以下の手順を実行して デフォルトプレゼンテーションリクエストからプレゼンテーションを開始する。 ドキュメントに デフォルトプレゼンテーションリクエスト が設定されていない場合、これらの手順は MUST 実行しないこと。
null値
ユーザーエージェントが プレゼンテーション接続開始を行う場合、 MUST 以下の手順を実行する:
PresentationRequest
Promise
で解決される(任意)
プレゼンテーション接続
PresentationConnection
S を作成する。
connectingに設定する。
PresentationConnectionAvailableEvent
インターフェースで、connection
属性を S で初期化して presentationRequest 上で発火する。イベントはバブルせず、キャンセル不可。
error と
closeReason・人間可読なcloseMessageで終了する。
http または https
スキームの挙動のみ定義しており、他のスキームの挙動は定義しません。
reconnect
メソッドが呼び出されたとき、ユーザーエージェントはMUST以下の手順でプレゼンテーションに再接続を行う:
PresentationRequest
オブジェクト(reconnectが呼ばれたもの)
Promise
Promiseとする。PresentationConnectionを検索する:
terminatedでない
PresentationConnectionが存在する場合、以下の手順を実行する:
PresentationConnectionとする。
connecting
または
connectedの場合、残りの手順を中断する。
connectingに設定する
PresentationConnectionを検索する:
terminatedでない
PresentationConnectionが存在する場合、以下の手順を実行する:
PresentationConnectionとする。
PresentationConnection
newConnectionを作成する。
connectingに設定する。
PresentationConnectionAvailableEvent
インターフェースで、connection
属性を newConnection で初期化して presentationRequest
上で発火する。イベントはバブルせず、キャンセル不可。
NotFoundError例外でrejectする。
以下は、PresentationRequest
インターフェースを実装するオブジェクトが、イベントハンドラIDL属性としてサポートしなければならない
(および対応するイベントハンドライベントタイプ)の一覧です:
| イベントハンドラ | イベントハンドライベントタイプ |
|---|---|
onconnectionavailable
|
connectionavailable
|
各プレゼンテーション接続は
PresentationConnection オブジェクトで表現されます。
制御側ユーザーエージェントおよび
受信側ユーザーエージェントは MUST
PresentationConnection を実装しなければなりません。
...(省略:WebIDL部分は翻訳不要)...
id 属性は
プレゼンテーション接続の
プレゼンテーション識別子を指定します。
url 属性は
プレゼンテーション接続の
プレゼンテーションURLを指定します。
state 属性は
プレゼンテーション接続の現在の状態を表します。状態は
PresentationConnectionState のいずれかです:
connecting:
ユーザーエージェントが
宛先ブラウジングコンテキストとの
プレゼンテーション接続確立を試みている状態。オブジェクト作成時の初期状態。
connected:
プレゼンテーション接続が確立され、通信可能な状態。
closed:
プレゼンテーション接続が終了した、または開始できなかった状態。
reconnect の呼び出しで再開可能。
通信は不可。
terminated:
受信側ブラウジングコンテキストが終了した状態。
そのプレゼンテーションへの
プレゼンテーション接続も終了し、再開不可。通信不可。
connected 状態は
メッセージ送信・受信が必ず成功することを保証しません。通信チャネルは突然切断される可能性があります。
こうした状況を早期検知したい場合はアプリケーション側で独自のキープアライブ機構を実装してください。
close メソッドが
PresentationConnection S
に呼ばれた場合、
ユーザーエージェントは MUST
プレゼンテーション接続の開始終了を
S・closed・空メッセージで実行する必要があります。
terminate メソッドが
PresentationConnection S
に
制御側ブラウジングコンテキストで呼ばれた場合、
ユーザーエージェントは MUST
制御側ブラウジングコンテキストでプレゼンテーション終了アルゴリズムを
Sで実行する。
terminate メソッドが
PresentationConnection S
に
受信側ブラウジングコンテキストで呼ばれた場合、
ユーザーエージェントは MUST
受信側ブラウジングコンテキストでプレゼンテーション終了アルゴリズムを
Sで実行する。
binaryType 属性は
BinaryType の値を取ります。
PresentationConnection オブジェクト作成時、
binaryType 属性は
MUST 文字列 "arraybuffer" に設定されなければなりません。
ゲッター時は最後に設定された値を返し、セッター時はユーザーエージェントは新しい値に設定しなければなりません。
binaryType 属性は
バイナリデータをスクリプトでどのように扱うかを制御できます。"blob" に設定すると
Blob 形式で、
"arraybuffer" に設定すると
ArrayBuffer形式で返されます。
デフォルトは "arraybuffer" です。文字列形式のデータ送信には影響ありません。
send メソッドが
PresentationConnection S
に呼ばれた場合、
ユーザーエージェントは MUST
send a message
アルゴリズムを S で実行しなければなりません。
PresentationConnection オブジェクト
Sが破棄(ドキュメントのナビゲートや閉じる等)され、かつ
プレゼンテーション接続状態が
connecting または
connected の場合、
ユーザーエージェントは MUST
プレゼンテーション接続の開始終了を
S・wentaway・空メッセージで実行する必要があります。
ユーザーエージェントが
宛先ブラウジングコンテキストから
PresentationConnection
S の終了シグナルを受け取った場合、
MUST
プレゼンテーション接続終了を
S・closed または
wentaway・空メッセージで実行する必要があります。
ユーザーエージェントがプレゼンテーション接続の確立を プレゼンテーション接続 を使って行う場合、 MUST 以下の手順を実行しなければなりません:
PresentationConnection オブジェクト
connectingでない場合、残りの手順を中止する。
connectedに設定する。
connect)を
presentationConnection で発火する。
error理由と
失敗内容を説明する人間可読のcloseMessageで終了する。
DOMStringとバイナリペイロードを信頼性・順序性を持って双方向メッセージとして運べる抽象化を提供しなければなりません。
PresentationConnection
を介したメッセージ送信
sendを複数回呼ぶ場合は、メッセージが相手側に信頼性・順序性を持って配送されなければなりません。トランスポートは現行標準の
RTCDataChannel
の信頼性モードと同等に機能すべきです。
プレゼンテーションメッセージデータは2つのブラウジングコンテキスト間で送信されるペイロードデータを指します。プレゼンテーションメッセージタイプは、そのデータの型で、textまたはbinaryのいずれかです。
ユーザーエージェントがメッセージ送信をプレゼンテーション接続経由で行う場合、MUST 以下の手順を実行しなければなりません:
stateプロパティがconnectedでない場合、throwし、InvalidStateError例外を投げて中断する。
ArrayBuffer、
ArrayBufferView、
Blob型ならbinary、
DOMString型ならtextに設定する。
error理由と
エラー内容記述のcloseMessageで終了する。
プレゼンテーション接続経由でメッセージ送信エラーが発生した場合、アプリケーションの回復支援のため、ユーザーエージェントは失敗した試行の詳細をcloseMessageに人間可読の文字列で含めるべきです。closeMessageの例:
Unable to send text message (network_error): "hello"("hello"は失敗メッセージの最初の256文字)DOMStringメッセージの場合
Unable to send binary message (invalid_message)
ArrayBuffer、
ArrayBufferView、
Blobメッセージの場合
PresentationConnection
を介したメッセージの受信
ユーザーエージェントがリモート側から
プレゼンテーションメッセージデータと
プレゼンテーションメッセージタイプの伝送を受信した場合、
MUST 以下の手順で
メッセージ受信を
PresentationConnection 経由で実行する:
stateプロパティが
connectedでない場合、残りの手順を中止する。
MessageEventインターフェース)で生成し、イベントタイプをmessage、
バブルしない・キャンセル不可とする。
textなら、eventのdata属性をDOMString型のmessageDataで初期化。
binaryかつ
binaryType
属性が"blob"なら、
eventのdata属性をmessageDataを生データとする新規
Blobオブジェクトで初期化。
binaryかつ
binaryType
属性が"arraybuffer"なら、
eventのdata属性をmessageData内容の新規
ArrayBufferオブジェクトで初期化。
ユーザーエージェントが
presentationConnection経由でメッセージ受信時に回復不能エラーに遭遇した場合、
MUST即座に
プレゼンテーション接続終了
presentationConnection を
error理由で終了する必要がある。
SHOULD エラー内容を人間可読なcloseMessageにすることが推奨される。
...(省略:WebIDL部分は翻訳不要)...
PresentationConnectionCloseEvent
は
プレゼンテーション接続が
closed状態に遷移したときに発火されます。
reason
属性は接続が終了した理由を示します。値は
PresentationConnectionCloseReason のいずれかです:
error:プレゼンテーションとの接続・通信機構が回復不能エラーに陥った。
closed:制御側ブラウジングコンテキストまたは
受信側ブラウジングコンテキストが
PresentationConnectionで
close()を呼び出した。
wentaway:ブラウザが接続を閉じた(例:接続所有ブラウジングコンテキストがナビゲート・破棄された)。
reason属性が
error の場合、
ユーザーエージェントは SHOULD
message 属性に
通信チャネルがどのようなエラーに遭遇したかを説明する人間可読の記述を設定すべきです。
PresentationConnectionCloseEvent
コンストラクターが呼ばれたとき、ユーザーエージェントは MUST 新しい
PresentationConnectionCloseEvent
オブジェクトを構築し、その
reason
属性は渡された
reason メンバーの値に設定し、
PresentationConnectionCloseEventInit
オブジェクトで渡されていれば
message属性に設定し、それ以外は空文字列に設定する。
PresentationConnection の終了
ユーザーエージェントが プレゼンテーション接続の開始終了 を行う場合、MUST 以下を実行する:
PresentationConnectionCloseReason
connecting または
connected
でない場合、残りの手順を中止する。
closed に設定する。
PresentationConnection
の終了意思を通知開始する。
実際に閉じられたことの確認を待たず、次の手順に進むことができる。
wentaway
でない場合、
ローカルで プレゼンテーション接続終了 の手順を
presentationConnection, closeReason, closeMessage で実行する。
ユーザーエージェントが プレゼンテーション接続終了 を行う場合、MUST 以下を実行する:
PresentationConnectionCloseReason
connecting、
connected、
closed
いずれでもない場合、残りの手順を中止する。
closed でない場合は
closed に設定する。
PresentationConnectionCloseEvent
インターフェースで、
reason
属性に closeReason、
message
属性に closeMessage を指定して
presentationConnection で発火する。イベントはバブルせず、キャンセル不可。
制御側ユーザーエージェントが 制御側ブラウジングコンテキストでプレゼンテーション終了 を connection を使って行う場合、 MUST 以下の手順を実行する:
connected または
connecting
でない場合、残りの手順を中止する。
connected
または
connecting
の場合、
グローバルタスクをキューに入れ
known connection の 関連グローバルオブジェクトで以下を実行:
terminated
に設定する。
以下のいずれかが発生した場合、受信側ユーザーエージェントは MUST 受信側ブラウジングコンテキストでプレゼンテーション終了を行う:
これは明示的なユーザー操作や、ユーザーエージェントのポリシーとして発生し得ます。たとえば、受信側ユーザーエージェントが
PresentationConnection
オブジェクトがすべて30分間閉じていたプレゼンテーションを終了するよう設定されている場合などが挙げられます。
受信側ユーザーエージェントが 受信側ブラウジングコンテキストでプレゼンテーション終了 を行う場合、 MUST 以下の手順を実行する:
connectedなら
connection を connectedControllers に追加する。
terminatedに設定する。
制御側ユーザーエージェントごとに1つだけ終了確認を送信すれば十分です。
受信側ユーザーエージェントがプレゼンテーションPの終了確認を送信し、 制御側ユーザーエージェントがそれを受信した場合、 制御側ユーザーエージェントは MUST 以下の手順を実行する:
connected
または
connecting
でない場合、残りの手順を中止する。
terminated
に設定する。
以下は PresentationConnection
インターフェースを実装するオブジェクトが、
イベントハンドラIDL属性としてサポートしなければならない(および対応するイベントハンドライベントタイプ)の一覧です:
| イベントハンドラ | イベントハンドライベントタイプ |
|---|---|
onmessage
|
message
|
onconnect
|
connect
|
onclose
|
close
|
onterminate
|
terminate
|
WebIDL[SecureContext, Exposed=Window]
interface PresentationReceiver {
readonly attribute Promise<PresentationConnectionList> connectionList;
};
PresentationReceiver インターフェースは、
受信側ブラウジングコンテキストが
制御側ブラウジングコンテキストにアクセスし、
それらと通信できるようにします。
PresentationReceiver インターフェースは MUST
受信側ブラウジングコンテキストで
受信側ユーザーエージェントにより実装されなければなりません。
connectionList 属性は取得時に MUST 以下の手順の結果を返します:
null でなければ
presentation controllers promise
を返し、残りの手順を中止する。
PresentationReceiver オブジェクトの
JavaScript realm で新規構築した
Promise とする。
null でなければ、
resolve で
presentation controllers promise を
presentation controllers monitor で解決する。
ユーザーエージェントが 受信側ブラウジングコンテキストの作成 を行う場合、MUST 以下の手順を実行する:
"denied"
に設定する。
Cache オブジェクト集合を作成する。
提示されたドキュメントが 子ナビゲーブル を 作成した場合(すなわち 受信側ブラウジングコンテキスト を トップレベルブラウジングコンテキストとするもの)は、 MUST 上記2~4の制約も持つこと。また、 MUST sandboxed top-level navigation without user activation browsing context flag を設定すること。これらすべての ブラウジングコンテキストは MUST 上記機能5~10で同じブラウジング状態(ストレージ)を共有すること。
トップレベルブラウジングコンテキストが新しいリソースにナビゲートし、 ナビゲート手順を実行する場合、ステップ1で ナビゲート許可か判定する必要がある。 また、MUST NOT フラグメント識別子へのナビゲートや ドキュメント再読み込み以外で自分自身を新リソースにナビゲートしてはならない。
この仕様は、プレゼンテーションディスプレイ選択時に表示される プレゼンテーションURLのオリジンに基づきユーザーが許可を与えられるようにします。
トップレベルブラウジングコンテキストが ナビゲート許可されていない場合、 SHOULD NOT 新しい トップレベルブラウジングコンテキストでリソースを開く提案をしてはならない。 それ以外は、SHOULD ナビゲート手順と一貫するべきである。
Window clients および worker clientsは 受信側ブラウジングコンテキストおよびその 子孫ナビゲーブルに関連付けられたものであっても、 互いの service worker に公開してはならない。
受信側ブラウジングコンテキストが終了した場合、
それおよび ブラウジングコンテキストの
子孫ナビゲーブルに関連付けられた
service workerは MUST
全て登録解除・終了されること。
また、関連する セッション履歴、cookie store、HTTP認証状態、
データベース、
session storage area、
local storage area、
service worker登録リストおよび Cache オブジェクトは
MUST 破棄され、他の ブラウジングコンテキストで再利用されてはならない。
このアルゴリズムは 1-UA や 2-UA の現行標準プレゼンテーションに 相互運用可能な動作を提供し、プレゼンテーションディスプレイ上に 2-UAプレゼンテーションの 状態が残らないよう最小化することを目的としています。
受信側ユーザーエージェントは SHOULD 受信側ブラウジングコンテキストで リソースを取得する際、Accept-Languageヘッダーを 制御側ユーザーエージェントの言語設定(つまり制御側ユーザーエージェントが送信する Accept-Languageと同じ)に合わせるべきです。 これにより、受信側ユーザーエージェントが ユーザーの言語・フォント設定に合わせてプレゼンテーションをレンダリングできます。
プレゼンテーションディスプレイの 動作環境によっては、設計上一部Web APIが動作しない(例えばユーザー入力必須)、 またはウィンドウ管理などが使えない場合があります。受信側ユーザーエージェントはその点を認識しておくべきです。 また、モーダルUIも慎重に扱う必要があります。 sandboxed modals flagは 受信側ブラウジングコンテキストに設定され、 ほとんどのそのような操作を防止します。
適合性で述べた通り、 制御側ユーザーエージェントと 受信側ユーザーエージェントを兼ねる場合は、 受信側ブラウジングコンテキストが 追加プレゼンテーションを作成(すなわち 制御側ブラウジングコンテキストにもなる)ことを許してもよい。 Web開発者は navigator.presentation.receiver を使い、 ドキュメントが受信側ブラウジングコンテキストとしてロードされたか検出できる。
WebIDL[SecureContext, Exposed=Window]
interface PresentationConnectionList : EventTarget {
readonly attribute FrozenArray<PresentationConnection> connections;
};
connections
属性は MUST プレゼンテーションコントローラーの集合内の
非terminatedなプレゼンテーション接続を返さなければなりません。
受信側ユーザーエージェントが 受信側ブラウジングコンテキストで 制御側ブラウジングコンテキストからの 受信プレゼンテーション接続の監視を開始する場合、 MUST 実装固有メカニズムで制御側ブラウジングコンテキストからの着信接続リクエストをリッスンし受け入れなければなりません。 制御側ブラウジングコンテキストから新たな接続リクエストを受信した場合、受信側ユーザーエージェントは MUST 以下の手順を実行します:
PresentationConnection
Sを作成する。
connectedに設定する。
失敗した場合はSのプレゼンテーション接続状態を
closedに設定し残りの手順を中止する。
nullなら以下を並行して実行:
PresentationConnectionListとして
このPresentationReceiverオブジェクトの
JavaScript realmで新規作成する。
nullでなければ
Presentation APIタスクをキューに入れ
resolveで
presentation controllers
promiseを
presentation controllers
monitorで解決する。
PresentationConnectionAvailableEvent
インターフェースでSをconnection属性に初期化し、
presentation controllers
monitorで発火する。イベントはバブルせず、キャンセル不可。
以下は、PresentationConnectionList
インターフェースを実装するオブジェクトが、イベントハンドラIDL属性としてサポートしなければならない(および対応するイベントハンドライベントタイプ)の一覧です:
| イベントハンドラ | イベントハンドライベントタイプ |
|---|---|
onconnectionavailable
|
connectionavailable
|
このセクションは規範的ではありません。
PresentationAvailability オブジェクト上で発火される
change イベントは、
プレゼンテーションディスプレイの有無に関する1ビットの情報を明らかにします。
このディスプレイは多くの場合、ブラウザのローカルエリアネットワークを通じて発見されます。
この情報は他の情報と組み合わせることでユーザーフィンガープリントに利用される可能性があります。
ただし、この情報はユーザーのローカルネットワーク環境にも依存するためリスクは最小化されます。
このAPIは 利用可能なプレゼンテーションディスプレイ一覧の監視 を可能にします。 ユーザーエージェントが与えられたURLに対する プレゼンテーションディスプレイの互換性・可用性をどのように判定するかは実装依存です。 もし 制御側ユーザーエージェントが プレゼンテーションリクエストURL を DIALアプリケーションにマッチさせて可用性を判定する場合、 この機能はユーザーが DIALアプリを プレゼンテーションディスプレイに インストールしているかどうかをユーザーの同意なく探るために利用される可能性があります。
プレゼンテーションは オリジンを越えてアクセスできます。 プレゼンテーション再接続に必要なのは、 プレゼンテーションURL と プレゼンテーション識別子のみです。 つまり、プレゼンテーションは特定の開始オリジンに結び付けられていません。
この設計により、異なるオリジンの制御コンテキストが共有プレゼンテーションリソースに接続できます。 プレゼンテーション識別子のセキュリティによって、任意のオリジンから既存のプレゼンテーションへ接続することが防止されます。
本仕様はまた、受信側ユーザーエージェントが
管理中プレゼンテーションの集合の情報を公開したり、
制御側ユーザーエージェントが他デバイスで開始されたプレゼンテーションへ再接続することも認めています。
これはユーザー、ローカルストレージ、サーバーなどから実行中プレゼンテーションの
プレゼンテーションURLと
プレゼンテーション識別子を取得し、
reconnect経由で接続することで可能になります。
本仕様はプレゼンテーションへ接続する当事者の身元について何も保証しません。
接続後、プレゼンテーションはアプリ固有の手段で接続相手の身元を追加確認しても構いません。
例として、プレゼンテーションが
send経由で
コントローラーにトークン提供を要求し、それで身元や認可を確認することもできます。
ユーザーが プレゼンテーションディスプレイ選択の手順で プレゼンテーションディスプレイ使用許可を求められた際、 制御側ユーザーエージェントは どのオリジンがリクエストしているか および どのオリジンが提示されるかを明示するべきです。
リクエスト元オリジンの表示によって、特に 子ナビゲーブル からリクエストが発生した場合、 ユーザーはどのコンテンツが要求しているか理解しやすくなります。 例えば、埋め込みコンテンツがユーザーを騙して不要なプレゼンテーション開始リクエストをクリックさせようとする可能性もあります。
sandboxed top-level navigation without user activation browsing context flagは 受信側ブラウジングコンテキストに設定され、 プレゼンテーションの存続期間中にトップレベルオリジンが変わらないことを保証します。
ユーザーが プレゼンテーション開始時は、 ユーザーがプレゼンテーションを排他的に制御します。 しかし、Presentation APIは追加デバイス(別ユーザーのものである可能性が高い)も プレゼンテーションに接続・制御できるようにします。 二台目のデバイスがプレゼンテーションに接続されたときは、すべての 制御側ユーザーエージェントが ブラウザクロムを通じて元のユーザーが排他的アクセス権を失ったこと、 複数コントローラーが存在することを通知することが推奨されます。
さらに、受信側ユーザーエージェントが ユーザー入力も受け付け、かつ プレゼンテーションディスプレイとして機能する場合、 受信側ユーザーエージェントは 受信側ブラウジングコンテキストがリモート側(つまりコントローラーが1つ以上接続された状態)で 制御されていることをブラウザクロムでユーザーに通知するべきです。
Presentation APIはディスプレイの「ローカル」の意味を抽象化し、ネットワーク越しのディスプレイも ユーザー端末に直接接続されているかのように扱います。 Presentation APIは、ページがいずれかのディスプレイへアクセスするために ユーザー許可を必要とします。これは、他人が閲覧可能な表示機器に 不要なコンテンツが表示されるなどの問題を防ぐためです。
プレゼンテーションURL と プレゼンテーション識別子は 他のブラウジングコンテキストからプレゼンテーションへの接続に利用できます。 それらは攻撃者が制御ページへコンテンツ注入できた場合に傍受される可能性があります。
プレゼンテーションで表示される内容はコントローラーとは異なります。 特に、ユーザーが両コンテキストでログインしている場合、 制御側ブラウジングコンテキストから ログアウトしても、受信側ブラウジングコンテキストでは 自動的にログアウトとはなりません。 認証を利用するアプリケーションはデバイス間通信時に特に注意してください。
ユーザーが「閲覧データの消去」を要求した際は、 ユーザーエージェントが認識するプレゼンテーション集合も消去するべきです。
プライベートブラウジングモード(「シークレットモード」)では、 その閲覧セッションの初期 管理中プレゼンテーションの集合は空でなければならず、 追加された プレゼンテーション接続は セッション終了時に破棄されなければなりません。
この仕様は 制御側ブラウジングコンテキストと 受信側ブラウジングコンテキスト間の通信プロトコルは規定しませんが、 対応する プレゼンテーション接続間の メッセージの機密性と真正性については一定の保証を設けるべきです。
WebIDLpartial interface Navigator {
[SecureContext, SameObject] readonly attribute Presentation presentation;
};
[SecureContext, Exposed=Window]
interface Presentation {
};
partial interface Presentation {
attribute PresentationRequest? defaultRequest;
};
partial interface Presentation {
readonly attribute PresentationReceiver? receiver;
};
[SecureContext, Exposed=Window]
interface PresentationRequest : EventTarget {
constructor(USVString url);
constructor(sequence<USVString> urls);
Promise<PresentationConnection> start();
Promise<PresentationConnection> reconnect(USVString presentationId);
Promise<PresentationAvailability> getAvailability();
attribute EventHandler onconnectionavailable;
};
[SecureContext, Exposed=Window]
interface PresentationAvailability : EventTarget {
readonly attribute boolean value;
attribute EventHandler onchange;
};
[SecureContext, Exposed=Window]
interface PresentationConnectionAvailableEvent : Event {
constructor(DOMString type, PresentationConnectionAvailableEventInit eventInitDict);
[SameObject] readonly attribute PresentationConnection connection;
};
dictionary PresentationConnectionAvailableEventInit : EventInit {
required PresentationConnection connection;
};
enum PresentationConnectionState { "connecting", "connected", "closed", "terminated" };
[SecureContext, Exposed=Window]
interface PresentationConnection : EventTarget {
readonly attribute USVString id;
readonly attribute USVString url;
readonly attribute PresentationConnectionState state;
undefined close();
undefined terminate();
attribute EventHandler onconnect;
attribute EventHandler onclose;
attribute EventHandler onterminate;
// Communication
attribute BinaryType binaryType;
attribute EventHandler onmessage;
undefined send (DOMString message);
undefined send (Blob data);
undefined send (ArrayBuffer data);
undefined send (ArrayBufferView data);
};
enum PresentationConnectionCloseReason { "error", "closed", "wentaway" };
[SecureContext, Exposed=Window]
interface PresentationConnectionCloseEvent : Event {
constructor(DOMString type, PresentationConnectionCloseEventInit eventInitDict);
readonly attribute PresentationConnectionCloseReason reason;
readonly attribute DOMString message;
};
dictionary PresentationConnectionCloseEventInit : EventInit {
required PresentationConnectionCloseReason reason;
DOMString message = "";
};
[SecureContext, Exposed=Window]
interface PresentationReceiver {
readonly attribute Promise<PresentationConnectionList> connectionList;
};
[SecureContext, Exposed=Window]
interface PresentationConnectionList : EventTarget {
readonly attribute FrozenArray<PresentationConnection> connections;
attribute EventHandler onconnectionavailable;
};
binaryType
PresentationConnectionの属性
§6.5
closeメソッド(PresentationConnection用)
§6.5
"connected"
PresentationConnectionStateの列挙値
§6.5
"connecting"(PresentationConnectionState列挙値)
§6.5
connectionList属性(PresentationReceiver用)
§6.6
connections属性(PresentationConnectionList用)
§6.7
defaultRequest
Presentation用の属性
§6.2.1
"error"
PresentationConnectionCloseReasonの列挙値
§6.5.4
getAvailabilityメソッド(PresentationRequest用)
§6.4.3
id属性(PresentationConnection用)
§6.5
onchange
PresentationAvailabilityの属性
§6.4
onclose
PresentationConnectionの属性
§6.5.9
onconnect
PresentationConnectionの属性
§6.5.9
PresentationRequestの属性
§6.3.6
PresentationConnectionListの属性
§6.7.2
onmessage
PresentationConnectionの属性
§6.5.9
onterminate
PresentationConnectionの属性
§6.5.9
presentation
Navigatorの属性
§6.2
Presentationインターフェース
§6.2
PresentationAvailability
インターフェース
§6.4
PresentationConnection
インターフェース
§6.5
PresentationConnectionAvailableEvent
インターフェース
§6.4.5
PresentationConnectionAvailableEventInit
辞書
§6.4.5
PresentationConnectionCloseEvent
インターフェース
§6.5.4
PresentationConnectionCloseEventInit
辞書
§6.5.4
PresentationConnectionCloseReason
列挙
§6.5.4
PresentationConnectionListインターフェース
§6.7
PresentationConnectionState列挙
§6.5
PresentationReceiver
インターフェース
§6.6
PresentationRequestインターフェース
§6.3
receiver属性(Presentation用)
§6.2.2
reconnectメソッド(PresentationRequest用)
§6.3.5
sendメソッド(PresentationConnection用)
§6.5
startメソッド(PresentationRequest用)
§6.3.2
state属性(PresentationConnection用)
§6.5
terminateメソッド(PresentationConnection用)
§6.5
"terminated"(PresentationConnectionState列挙値)
§6.5
url属性(PresentationConnection用)
§6.5
value属性(PresentationAvailability用)
§6.4
"wentaway"(PresentationConnectionCloseReason列挙値)
§6.5.4
Eventインターフェース
EventInit
EventTargetインターフェース
Blobインターフェース
Document用)
EventHandler
localStorage属性(WindowLocalStorage用)
MessageEventインターフェース
reload()(Location用)
sessionStorage属性(WindowSessionStorage用)
Cacheインターフェース
ArrayBufferインターフェース
ArrayBufferView
boolean型
DOMStringインターフェース
[Exposed]拡張属性
FrozenArrayインターフェース
InvalidAccessError例外
InvalidStateError例外
NotAllowedError例外
NotFoundError 例外
NotSupportedError 例外
OperationError 例外
Promise インターフェース
[SameObject] 拡張属性
[SecureContext] 拡張属性
SecurityError 例外
SyntaxError 例外
exception用)
undefined 型
USVString インターフェース
RTCDataChannel インターフェース
BinaryType 列挙
Addison Phillips、Anne Van Kesteren、Anssi Kostiainen、Anton Vayvod、Chris Needham、Christine Runnegar、Daniel Davis、Domenic Denicola、Erik Wilde、François Daoust、闵洪波 (Hongbo Min)、Hongki CHA、Hubert Sablonnière、Hyojin Song、Hyun June Kim、Jean-Claude Dufourd、Joanmarie Diggs、Jonas Sicking、Louay Bassbouss、Mark Watson、Martin Dürst、Matt Hammond、Mike West、Mounir Lamouri、Nick Doty、Oleg Beletski、Philip Jägenstedt、Richard Ishida、Shih-Chiang Chien、Takeshi Kanai、Tobie Langel、Tomoyuki Shimizu、Travis Leithead、Wayne Carr 各氏に編集・レビュー・フィードバック面でご協力いただきました。感謝します。
AirPlay、HDMI、Chromecast、DLNA、Miracastは、それぞれApple Inc.、HDMI Licensing LLC.、Google Inc.、Digital Living Network Alliance、Wi-Fi Allianceの登録商標です。これらは参考情報としてのみ記載されており、仕様の実装に必須ではありません。
本仕様が提案勧告へ進むには、定義された各適合クラス(制御側ユーザーエージェントと受信側ユーザーエージェント)ごとに、各機能の独立した相互運用可能な実装が2つ以上必要です。各機能は異なる製品セットで実装されてもよく、全機能を単一製品が実装する必要はありません。 また、制御側ユーザーエージェント適合クラスの実装には、1-UAモードの実装と2-UAモードの実装がそれぞれ1つ以上含まれていなければなりません。 2-UAモード実装はhttp/https以外のプレゼンテーションURLのみサポートしてもかまいません。受信側ユーザーエージェント適合クラスの実装には2-UAモード実装は含めてはなりません。
このAPIは最近セキュアコンテキスト専用となりました。初期実装で非セキュアコンテキストのAPI廃止には時間がかかります。グループは将来的に制限する計画がある場合、非セキュアコンテキストでもAPIを公開している実装での提案勧告移行を申請できます。
これら基準における用語定義:
このセクションは規範的ではありません。
このセクションでは、2016年7月に現行標準の候補勧告として初公開以来の仕様変更を、グループのissue tracker関連issueへのリンク付きで一覧します。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: