OpenSearch

Firefox 2 や IE 7 で使えるようになったブラウザに組み込めるサイト検索の仕組み「OpenSearch」をこのサイトも対応したのでメモしておく。

opensearchbar.png

以下参考にさせていただいた。

定義XMLの作成

まず、検索URLなどを定義する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>blog.shimazu.org</ShortName>
  <Description>blog.shimazu.org</Description>
  <InputEncoding>utf-8</InputEncoding>
  <Image width="16" height="16">http://blog.shimazu.org/favicon.ico</Image>
  <Url type="text/html" method="GET" template="http://blog.shimazu.org/index.php?s={searchTerms}" />
</OpenSearchDescription>

Imageタグの箇所にはBase64形式のデータも格納可能で、[JavaScript] dataスキームURI生成(画像データのBase64変換) にて、「画像URL」の箇所に http://blog.shimazu.org/favicon.ico などと入力すると、

var data = 'data:image/x-icon;base64,'+
    'R0lGODlhEAAQALMAAP///+Xl5UBAQL+/v6ampllZWU1NTbOzs2ZmZvLy8oCAgMzMzJmZmebm5gAA'+
    'AAAAACH5BAAAAAAALAAAAAAQABAAAARGMMhJqwQ4a323xx0mDB8QAmN5jgSzbGthFALBBZqAYIRw'+
    '5wdMIgXCZYgoUjFnAwwEjcyqdijspEYRwSBQJH4lWDZctJglEQA7';

といった感じでBase64変換される。これを使うと以下のようになる。

<?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>blog.shimazu.org</ShortName>
  <Description>blog.shimazu.org</Description>
  <InputEncoding>utf-8</InputEncoding>
  <Url type="text/html" method="GET" template="http://blog.shimazu.org/index.php?s={searchTerms}" />
<Image width="16" height="16" type="image/x-icon">data:image/x-icon;base64,R0lGODlhEAAQALMAAP///+Xl5UBAQL+/v6ampllZWU1NTbOzs2ZmZvLy8oCAgMzMzJmZmebm5gAAAAAAACH5BAAAAAAALAAAAAAQABAAAARGMMhJqwQ4a323xx0mDB8QAmN5jgSzbGthFALBBZqAYIRw5wdMIgXCZYgoUjFnAwwEjcyqdijspEYRwSBQJH4lWDZctJglEQA7</Image>
</OpenSearchDescription>

今回は単に画像URLの指定でXMLを作成し、 http://blog.shimazu.org/utils/opensearch.xml に置いた。

linkタグの追加

headタグの中に以下linkタグを追加する。

<link rel="search" type="application/opensearchdescription+xml" title="blog.shimazu.org" href="http://blog.shimazu.org/utils/opensearch.xml">

すると、以下のような登録メニューを出せるようになる。

opensearch.png

aタグの追加

「Meta」サイトバーに「Add to Search Bar」リンクを追加するため、以下スクリプトを追加した。

function installOpenSearch(engineURL) {
    if (!engineURL) return true;
    window.external.AddSearchProvider(engineURL);
}

(function(){
    var E = YAHOO.util.Event;
    var D = YAHOO.util.Dom;
    E.addListener(this, 'load', function(){
        if (typeof window.external == "object" && typeof window.external.AddSearchProvider == "function") {
            var ul = D.getNextSibling('sidebarMeta');
            if(ul) ul.innerHTML += '<li><a href="javascript:void(0)" onclick="return installOpenSearch(\'http://blog.shimazu.org/utils/opensearch.xml\');">Add to Search Bar</a></li>';
        }
    });
})();

上記に記載の

typeof window.external == "object" && typeof window.external.AddSearchProvider == "function"

という条件式は、「OpenSearch」対応ブラウザか否かを判別するが、Mozilla Japan – アドオン – Firefox – 検索エンジン に記載のスクリプトを参考にさせていただいた。

Leave a Reply