<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <dfn><ruby>取扱器<rt>ハンドラー</rt><rt xml:lang="en">handler</rt></ruby></dfn>は、
特定の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL scheme</anchor> や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>の処理を行う<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ソフトウェア部品</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 普通、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラグイン</anchor>以外の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ネイティブアプリケーション</anchor>や
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>として実装されているものをいいます。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="en-GB-x-hixie">HTML Standard</cite> (<time>2016-07-19 18:13:57 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#custom-handlers">https://html.spec.whatwg.org/#custom-handlers</anchor-external></li></ul></refs></section><section><h1>分類</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL scheme</anchor> ごとに登録される<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル取扱器</anchor>と、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor>ごとに登録される<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容取扱器</anchor>があります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ネイティブアプリケーション</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>は、伝統的に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘルパーアプリケーション</anchor>と呼ばれています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>側で管理される場合もあれば、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>独自で管理している場合、両方の機構を併用している場合もあります。</p></section><section><h1>API</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webページ</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>を提示する次の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM API</anchor>
が用意されています。<figure class="list middle"><ul><li><code class="DOMm" xml:lang="en">registerProtocolHandler</code></li><li><code class="DOMm" xml:lang="en">isProtocolHandlerRegistered</code></li><li><code class="DOMm" xml:lang="en">unregisterProtocolHandler</code></li><li><code class="DOMm" xml:lang="en">registerContentHandler</code></li><li><code class="DOMm" xml:lang="en">isContentHandlerRegistered</code></li><li><code class="DOMm" xml:lang="en">unregisterContentHandler</code></li></ul></figure></p></section><section><h1>文脈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">navigate</anchor> から呼び出されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> を開く <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor> や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>を開く <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor> は、
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>側で管理されている) <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>を呼び出します。</p></section><section><h1>取扱器データベース</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>は、<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器データベース</f></dfn>を持ちます。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 実際には<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>独自で管理していることもあれば、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>に一部または全部を委ねていることもあります。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器データベース</anchor>は、<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>プロトコル取扱器</anchor>群</f>と<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>内容取扱器</anchor>群</f>の
2つの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">集合</anchor>を持ちます。前者は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル取扱器</anchor>の、後者は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容取扱器</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">集合</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 同じ<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scheme<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URL scheme</title></f>や<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</f>の (処理が異なる) 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">集合</anchor>中に複数含められるかどうかは、実装によります。
実装によっては、複数含まれていれば、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>にどれを選択するかを都度問い合わせたり、
いずれかを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既定</anchor>のものと選ぶことができたりするかもしれません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 他に、 <code class="DOMm" xml:lang="en">registerProtocolHandler</code> や <code class="DOMm" xml:lang="en">registerContentHandler</code>
では、悪意ある (または<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者体験</anchor>への意識が低い) <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>による乱用を防ぐため、
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>が拒否したものも含め) 提示された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor> (や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>の呼び出しの状況)
をある程度記憶しておくことが好ましいとされています。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unix</anchor> 系の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターネットメール</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUA</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の実装は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器データベース</anchor>に相当する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘルパーアプリケーション</anchor>記述用の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル形式</anchor>として
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mailcap</anchor>
を採用していました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">w3m</anchor> のように <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unix</anchor> 系の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>にも、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mailcap</anchor>
を流用して<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘルパーアプリケーション</anchor>を指定できるものがありました。</p></section><section><h1>取扱器オブジェクト</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>は、次の状態を持ちます。<figure class="list members"><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">種別</f></dt><dd><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル取扱器</anchor>または<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容取扱器</anchor>または<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>依存の種別</dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">題名</f></dt><dd><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間</anchor>向けの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>の名称です。</dd></dl></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>の場合、次の状態を持ちます。<figure class="list members"><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">proto-URL</f></dt><dd>実行する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">proto-URL</anchor> です。</dd></dl></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ネイティブアプリケーション</anchor>の場合、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>依存の状態を持ちます。
例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘルパーアプリケーション</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル名</anchor>や、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コマンドライン引数</anchor>などを保持する必要がありそうです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル取扱器</anchor>の場合、次の状態を持ちます。<figure class="list members"><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scheme<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URL scheme</title></f></dt><dd></dd></dl></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容取扱器</anchor>の場合、次の状態を持ちます。<figure class="list members"><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</f></dt><dd></dd></dl></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> 他に、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>によっては 「<code>https://example.com/hoge/</code>
以下の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>」といった指定もできることがあります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> その他に、既定の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器</anchor>であるかどうか、利用頻度や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アイコン</anchor>などの実装や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>に依存した情報も保持する必要があるかもしれません。</p><section><h1>登録</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <code class="DOMm" xml:lang="en">registerProtocolHandler</code> や
<code class="DOMm" xml:lang="en">registerContentHandler</code> の<dfn><var>取扱器</var>の登録</dfn>は、
任意の処理を行えます。例えば、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に<var>取扱器</var>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器データベース</f>に追加するかどうか、
既定値とするかどうか、取り消すかといった照会をして構いません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">モーダルダイアログ</anchor>でもそうでなくても構いません。
<var>取扱器</var>を記憶しておいて、後で良きタイミングで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に提示しても構いません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> 任意の方法とはいえ、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">モーダルダイアログ</anchor>は好ましくないと現在では考えられていますから、
それ以外の方法で提示するべきでしょう。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> また、<var>取扱器</var>を (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>が拒否した場合も含め) 記憶しておき、
同じ要求が何度も繰り返されていないか検査する<SHOULD xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べきです</SHOULD> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p></section></section><section><h1>メモ</h1></section></body></html>