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: