FireFox1.5(以下FF1.5)と2.0(以下FF2)とIE7で動く右上の検索バーのプラグインを書くときに躓いたところまとめ。 FF2とIE7の検索プラグインはOpenSearchという規格に概ね則っているので書き方に気をつければ1つのプラグインで済む。 FF1.5は対応していないので専用に別に書く必要がある。 FF2とIE7にはWebページに関連する検索プラグインを自動的に検出する機能もある。

OpenSearchの仕様:

http://opensearch.a9.com/spec/opensearchdescription/1.0/

上記の和訳と補足:

http://qdbm.sourceforge.net/mikio/rbbs.cgi?id=RA11277192801018829586

IE7とFF2で動くOpenSearchプラグイン:

http://www5.big.or.jp/~seraph/ragna/searchplugin.xml

FF2で動くOpenSearchプラグイン:

http://hyper-text.org/archives/2006/10/firefox2_opensearch_plugin.shtml

MDCのFF2用OpenSearchプラグインの書き方ページ:

http://developer.mozilla.org/ja/docs/Creating_OpenSearch_plugins_for_Firefox

MDCのFF2用OpenSearchプラグインのインストール方法ページ:

http://developer.mozilla.org/ja/docs/Adding_search_engines_from_web_pages

mozdevのFF1.5用のプラグインの構文の詳細:

http://mycroft.mozdev.org/deepdocs/deepdocs.html

作り方要点

  • インストールさせるWebページに以下を記述
    <script type="text/javascript">
    	function install()
    	{
    		//親フォルダのURLを取得
    		var root = location.href.substr(0,location.href.lastIndexOf("/")) + "/";
    		try
    		{
    			//FF2とIE7用OpenSearchプラグイン
    			//AddSearchProviderの引数は絶対URLにしないとFireFoxで動かない。
    			window.external.AddSearchProvider( root + "sample.xml")
    			return;
    		}
    		catch(e)
    		{
    			try
    			{
    				//だめならFF1.5用Sherlockプラグイン
    				//AddSearchProviderの引数は絶対URLにしないと動かない。
    				//検索プラグイン(~.src)と検索プラグインのアイコン(~.pngなど)の
    				//拡張子より前の名前は一緒にしておかないと、
    				//登録できるものの検索メニュー内で2行にずれて表示されてしまうことがあるので注意。
    				window.sidebar.addSearchEngine(
    					root + "sample.src",
    					root + "sample.png",
    					"title_of_sample",
    					""
    				)
    				return;
    			}
    			catch(e)
    			{
    			}
    		}
    		//ここにきたらうまくインストールできなかったことになる。
    		alert("インストールできませんでした。");
    	}
    </script>
    <!-- 以下で自動検出が有効になる。FireFoxでもhrefは相対URLでOK。 -->
    <link rel="search" type="application/opensearchdescription+xml" title="title_of_sample" href="sample.xml" />
    <a href="javascript:install()">インストール</a>
    
    • FireFox系では (typeof window.external.AddSearchProvider)=="function" となるが、
    • IE7では (typeof window.external.AddSearchProvider)=="unknown" となる。
  • OpenSearchプラグイン(FF2/IE7) ~.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
    	<ShortName>sample_short_name</ShortName>
    	<LongName>sample_long_name</LongName>
    	<Description>sample_description</Description>
    	<Tags>tag1 tag2</Tags>
    	<InputEncoding>Shift_JIS</InputEncoding>
    	<Developer>sample_developer</Developer>
    	<Contact>mail@sample.com</Contact>
    	<Attribution>Copyright (C) sample.com. 2006</Attribution>
    	<SyndicationRight>open</SyndicationRight>
    	<AdultContent>false</AdultContent>
    	<Image>sample.png</Image>
    	<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAA...FgIB%2FAmBXXhwJgAAAABJRU5ErkJggg%3D%3D</Image>
    	<Url type="text/html" method="GET" template="http://sample.com/search.php" />
    	<moz:SearchForm>http://sample.com/</moz:SearchForm>
    </OpenSearchDescription>
    
    • はじめにXML宣言でエンコードを指定しておけば以降で2バイト文字を使っても大丈夫。
    • ShortNameなどの値の先頭に@があるとIE7ではエラーとなるらしくインストールできない。
      • (その場で検索することはできる。)
    • FF2はImageタグの中にURLを書いてもそれをつかわない。上記のようにBase64でエンコードして張り付ける必要がある。
      • http://software.hixie.ch/utilities/cgi/data/data
      • 上記のサイトでbase64にチェックを入れてWeb上の画像なら"Alternatively, give an HTTP URI to use as input:"にURLを、
      • ローカルの画像なら"Alternatively, give an HTTP URI to use as input:"でファイルを選択してGenerateする。
      • IEでは動かない。
    • IE7では検索プラグインのアイコンは使わない模様
    • Urlタグのtypeでapplication/rss+xmlはIE7でしか使えない。
    • FF2で動くサンプルではUrlタグの子としてParamタグを使って引数を指定しているが、IE7では動かない。
      • templateに直接書く必要がある。
    • Urlタグのtemplateで、クエリをつなげて書くとき、&とだけ書くとFF2でxmlが整形式でないといわれてインストールできない。
      • &amp;amp;と書くこと。
  • Sherlockプラグイン(FF1.5) ~.src
    <search
    	name = "sample_name"
    	description="sample_description"
    	method = "get"
    	action = "http://sample.com/search.php"
    	update="http://sample.com/sample.src"
    	updateIcon="http://sample.com/sample.png"
    	updateCheckDays="3"
    	queryEncoding="Shift_JIS"
    	queryCharset="Shift_JIS"
    	sourceTextEncoding = "1"
    >
    	<input name="Query" user>
    	<input name="Type" value="All">
    	<interpret
    		browserResultType = "result"
    		charset="Shift_JIS"
    	>
    </search>
    
    <browser
    	update="http://sample.com/sample.src"
    	updateIcon="http://sample.com/sample.png"
    	updateCheckDays="3"
    >
    
    • 行頭に#を書くとコメントをかける。
    • 基本的にFireFoxのデフォルトエンコードで書かれていると思って読み込まれるようなので、
      • 文字定数の中やコメントの中に2バイト文字列を書くと化けたりインストールできなかったりするかもしれない。
    • browserタグとsearchタグに一緒の要素があるが、FireFoxはbrowserタグを読むらしい。
    • inputタグがHTMLのinputタグのような動作になる。ユーザーが検索バーに入力した文字列がuser属性のところに入る模様。
    • アイコンサイズは16*16。