handler

取扱器 (Web ブラウザー)

[2] 取扱器 (ハンドラー) (handler) は、 特定の URL schemeMIME型資源の処理を行うソフトウェア部品です。

[3] 普通、Webブラウザープラグイン以外のネイティブアプリケーションWebアプリケーションとして実装されているものをいいます。

仕様書

分類

[4] URL scheme ごとに登録されるプロトコル取扱器と、 MIME型ごとに登録される内容取扱器があります。

[5] ネイティブアプリケーション取扱器は、伝統的にヘルパーアプリケーションと呼ばれています。

[6] プラットフォーム側で管理される場合もあれば、 Webブラウザー独自で管理している場合、両方の機構を併用している場合もあります。

API

[7] Webページから著者利用者取扱器を提示する次の DOM API が用意されています。

文脈

[8] navigate から呼び出されます。

[9] プラットフォームURL を開く APIファイルを開く API は、 (プラットフォーム側で管理されている) 取扱器を呼び出します。

取扱器データベース

[10] Webブラウザーは、取扱器データベースを持ちます。

[11] 実際にはWebブラウザー独自で管理していることもあれば、 プラットフォームに一部または全部を委ねていることもあります。

[12] 取扱器データベースは、プロトコル取扱器内容取扱器の 2つの集合を持ちます。前者はプロトコル取扱器の、後者は内容取扱器集合です。

[17] 同じschemeMIME型の (処理が異なる) 取扱器集合中に複数含められるかどうかは、実装によります。 実装によっては、複数含まれていれば、利用者にどれを選択するかを都度問い合わせたり、 いずれかを既定のものと選ぶことができたりするかもしれません。

[18] 他に、 registerProtocolHandlerregisterContentHandler では、悪意ある (または利用者体験への意識が低い) 著者による乱用を防ぐため、 (利用者が拒否したものも含め) 提示された取扱器 (やメソッドの呼び出しの状況) をある程度記憶しておくことが好ましいとされています。

取扱器オブジェクト

[13] 取扱器は、次の状態を持ちます。

種別
プロトコル取扱器または内容取扱器またはプラットフォーム依存の種別
題名
人間向けの取扱器の名称です。

[14] Webアプリケーションの場合、次の状態を持ちます。

proto-URL
実行するWebアプリケーションproto-URL です。

[19] ネイティブアプリケーションの場合、プラットフォーム依存の状態を持ちます。 例えばヘルパーアプリケーションファイル名や、コマンドライン引数などを保持する必要がありそうです。

[15] プロトコル取扱器の場合、次の状態を持ちます。

scheme

[16] 内容取扱器の場合、次の状態を持ちます。

MIME型

[21] 他に、プラットフォームによっては 「https://example.com/hoge/ 以下の取扱器」といった指定もできることがあります。

[20] その他に、既定の取扱器であるかどうか、利用頻度やアイコンなどの実装やプラットフォームに依存した情報も保持する必要があるかもしれません。

登録

[22] registerProtocolHandlerregisterContentHandler取扱器の登録は、 任意の処理を行えます。例えば、 利用者取扱器利用者エージェント取扱器データベースに追加するかどうか、 既定値とするかどうか、取り消すかといった照会をして構いません。 モーダルダイアログでもそうでなくても構いません。 取扱器を記憶しておいて、後で良きタイミングで利用者に提示しても構いません。 >>1

[41] 任意の方法とはいえ、モーダルダイアログは好ましくないと現在では考えられていますから、 それ以外の方法で提示するべきでしょう。

[29] また、取扱器を (利用者が拒否した場合も含め) 記憶しておき、 同じ要求が何度も繰り返されていないか検査するべきです >>1