Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Creating OpenSearch plugins for Firefox

OpenSearch

Firefox 2 は検索プラグインとして OpenSearch 記述フォーマットをサポートしています。OpenSearch 記述シンタックスを使ったプラグインは IE 7 と Firefox で互換性があります。このため、ウェブでの利用で推奨されたフォーマットです。

Firefox は検索サジェストSearchForm 要素のような OpenSearch 記述シンタックスに含まれていない追加の検索機能もサポートします。この記事では Firefox 特有の機能をサポートした OpenSearch 互換の検索プラグインの作成にフォーカスをあてていきます。

OpenSearch 記述ファイルは検索プラグインの自動検出に書かれているように通知でき、Web ページから検索エンジンを追加するに書かれているようにプログラム的にインストールできます。

OpenSearch 記述ファイル

検索エンジンを記述した XML ファイルはとてもシンプルで、以下の基本的なテンプレートに従います。あなたが書いている検索エンジンに応じて、斜体になっている箇所をカスタマイズする必要があります。

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
                       xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>engineName</ShortName>
<Description>engineDescription</Description>
<InputEncoding>inputEncoding</InputEncoding>
<Image width="16" height="16">data:image/x-icon;base64,imageData</Image>
<Url type="text/html" method="method" template="searchURL">
  <Param name="paramName1" value="paramValue1"/>
  ...
  <Param name="paramNameN" value="paramValueN"/>
</Url>
<Url type="application/x-suggestions+json" template="suggestionURL"/>
<moz:SearchForm>searchFormURL</moz:SearchForm>
</OpenSearchDescription>
ShortName
検索エンジンの短い名前。
Description
検索エンジンの簡単な説明。
InputEncoding
検索エンジンがデータの入力に使っているエンコーディング。
Image
検索エンジンを表す Base-64 でエンコードされた 16x16 のアイコン。ここに置くためのデータを作成するのに使える便利なツールの一つはここで見付かります: The data: URI kitchen
Url
検索に使う 1 つまたは複数の URL を記述します。method 属性は結果を得るために GETPOST リクエストのどちらを使うか指定します。template 属性は検索クエリのベースとなる URL を指定します。
注意: Internet Explorer 7 は POST リクエストをサポートしていません。
Firefox がサポートしている URL タイプは 2 つです:
  • type="text/html" は実際の検索結果そのものの URL を設定するために使われます。
  • type="application/x-suggestions+json" は検索サジェストを得るために使われる URL を設定するために使われます。
どちらの URL のタイプでも、ユーザが検索バーに入力した検索語句に置き換えられる {searchTerms} を使うことができます。サポートしている他の動的な検索パラメータは OpenSearch 1.1 パラメータに記述されています。
検索サジェストのクエリに指定された URL のテンプレートは JavaScript Object Notation (JSON) フォーマットで補完リストを取得するために使われます。サーバ上で検索サジェストのサポートを実装する方法の詳細は 検索プラグインでの検索サジェストのサポートを見てください。

Image:SearchSuggestionSample.png

Param
検索クエリともに通過させるために必要なキー/値のペアのパラメータです。この値を指定する際にはユーザが検索バーに入力した検索語句を挿入するための {searchTerms} を使うことができます。
注意: Internet Explorer 7 はこの要素をサポートしていません。
SearchForm
プラグインのサイトの検索ページを開くための URL。これは Firefox にユーザが直接 Web サイトを訪れる方法を提供します。
注意: この要素は Firefox 特有で OpenSearch 仕様の一部ではないため、この要素をサポートしていない他のユーザエージェントが安全に無視できるようにするために、上の例では "moz:" XML 名前空間接頭辞を使っています。

検索プラグインの自動検出

検索プラグインを提供しているウェブサイトは Firefox ユーザがプラグインを簡単にダウンロードしてインストールできるように通知することができます。

自動検出をサポートするには、ウェブページの <HEAD> セクションに単に一行追加するだけです。

<link rel="search" type="application/opensearchdescription+xml" title="searchTitle" href="pluginURL">

斜体の項目を以下で説明されているように置き換えてください。

searchTitle
"MDC を検索" や 'Yahoo! 検索" のような実行する検索の名前です。この値は、プラグインファイルの ShortName と一致させる必要があります。
pluginURL
ブラウザがダウンロードできる XML 検索プラグインの URL です。

もしあなたのサイトが複数の検索プラグインを提供しているなら、それら全ての自動検出をサポートすることができます。例:

<link rel="search" type="application/opensearchdescription+xml" title="MySite: 著者" href="http://www.mysite.com/mysiteauthor.xml">
<link rel="search" type="application/opensearchdescription+xml" title="MySite: タイトル" href="http://www.mysite.com/mysitetitle.xml">

この方法であなたのサイトは著者による検索とタイトルによる検索を行うプラグインを別々のものとしてを提供することができます。

トラブルシューティングのヒント

検索プラグインの XML に問題があると、検出されたプラグインを Firefox 2 に追加する際にエラーが発生するでしょう。エラーメッセージは完全な参考になるわけではありません、しかし、以下のヒントが問題を探す手助けになるでしょう。

  • 検索プラグインが整形式 (well formed)か確認してください。

ファイルを Firefox に直接読みこませることによって確認できます。テンプレート URL の中のアンパサンド(&)は &amp; でエスケープされている必要があり、タグは最後のスラッシュか一致する終了タグで閉じられている必要があります。

  • xmlns 属性が重要です。xmlns 属性無しでは "Firefox は次の場所から検索エンジンをダウンロードできませんでした:(URL)" というエラーメッセージを受け取るでしょう。
  • text/html URL を含めなくてはならない ことに注意してください — Atom や RSS URL タイプしか含まない検索エンジン(それは妥当なのですが、Firefox はサポートしていません) は "検索エンジンをダウンロードできませんでした"というエラーを引き起こします。


さらに、検索プラグインサービスはプラグイン開発者が使うであろうログの仕組みを提供します。about:config を使い 'browser.search.log' を true にしてください。検索プラグインが追加されるとログ情報が Firefox のエラーコンソール(ツール -> エラーコンソール)に表示されます。

参考資料

ドキュメントのタグと貢献者

 このページの貢献者: tregagnon, Teppeis, Mgjbot, Rodrigoknascimento, Citora, Taken
 最終更新者: tregagnon,