FireFox1.5(以下FF1.5)と2.0(以下FF2)とIE7で動く右上の検索バーのプラグインを書くときに躓いたところまとめ。 FF2とIE7の検索プラグインはOpenSearchという規格に概ね則っているので書き方に気をつければ1つのプラグインで済む。 FF1.5は対応していないので専用に別に書く必要がある。 FF2とIE7にはWebページに関連する検索プラグインを自動的に検出する機能もある。
OpenSearchの仕様:
上記の和訳と補足:
http://qdbm.sourceforge.net/mikio/rbbs.cgi?id=RA11277192801018829586
IE7とFF2で動くOpenSearchプラグイン:
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用のプラグインの構文の詳細:
作り方要点
- インストールさせる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;と書くこと。
- 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タグを読むらしい。
- searchに書くのはapple(mac?)の流儀らしい。
- http://mycroft.mozdev.org/deepdocs/searchtag.html#OpSherlock
- inputタグがHTMLのinputタグのような動作になる。ユーザーが検索バーに入力した文字列がuser属性のところに入る模様。
- アイコンサイズは16*16。