IE8に手動で好きな検索プロバイダーを追加する

この記事を書くことになった経緯

色々とやリ方を調べても
右上の検索の▼->追加のプロバイダーを検索->検索プロバイダを作成する
のやり方が王道みたいですが
最後の「検索プロバイダを作成する」がなかなか見当たりません
なんだか存在しないようなので別の方法を調べました

やり方

まずは以下のようなxmlを用意します*1

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
    <ShortName>Google</ShortName>
    <Image width="16" height="16" type="image/png">data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA</Image>
    <Url type="text/html" template="https://encrypted.google.com/search?num=100&amp;ie=utf-8&amp;oe=utf-8&amp;hl=ja&amp;safe=off&amp;filter=0&amp;pws=0&amp;complete=0&amp;gbv=1&amp;q={searchTerms}"/>
    <Url type="application/x-suggestions+json" template="http://google.com/complete/search?output=firefox&amp;hl=ja&amp;qu={searchTerms}"/>
</OpenSearchDescription>

個人が変更する箇所は

    <ShortName>Google</ShortName>
    <Image width="16" height="16" type="image/png">data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA</Image>
    <Url type="text/html" template="https://encrypted.google.com/search?num=100&amp;ie=utf-8&amp;oe=utf-8&amp;hl=ja&amp;safe=off&amp;filter=0&amp;pws=0&amp;complete=0&amp;gbv=1&amp;q={searchTerms}"/>
    <Url type="application/x-suggestions+json" template="http://google.com/complete/search?output=firefox&amp;hl=ja&amp;qu={searchTerms}"/>

この4つです
簡単に説明しますと
ShortNameのGoogleはその検索エンジンの名前

Imageのdata:image/(以下略)は画像へのリンクですがここではbase64を使ってますがよく見るアドレスでも問題ないです
検索エンジンのアイコンなどに使われます
画像なんていらないという人は省いても特に問題はないです

Url type="text/html(以下略)のtemplateの値は検索結果のURLで
{searchTerms}は入力したテキストに置換されます

Url type="application/(以下略)のtemplateの値はサジェストを使う時に使うURLを指定します
{searchTerms}は入力したテキストに置換されます
サジェストを使わないという人は省いても特に問題はないです
typeの値は場合によっては変更する必要があると思います

それとurlの&は&amp;に置換しておく必要があります*2
さて、皆さん個人用のxmlが作成できたら
次はそのxmlをインターネット上にアップロードして直接そのファイルにアクセスできるようにする必要があります*3
もし上げるならgistなどがおすすめです
アップロードができたら以下のようなhtmlを用意します

<html>
    <head>
    </head>
    <body>
        <a href="#"
            onclick="window.external.AddSearchProvider('https://raw.github.com/gist/3160033/347b6614dc68abab637ae0e02a6da4d855bf2095/google.xml')"
            >Add Search Provider Example</a>
    </body>
</html>

皆さんが変更する必要がある箇所は

            onclick="window.external.AddSearchProvider('https://raw.github.com/gist/3160033/347b6614dc68abab637ae0e02a6da4d855bf2095/google.xml')"

ここのhttps://(以下略)から始まるurlの箇所です
これは先程アップロードしたxmlへのurlを指定します

後はそのhtmlを開いてリンクを開くと追加するか確認するウィンドウが出るので承認すれば無事追加完了です

やり方を導いた方法

http://msdn.microsoft.com/ja-jp/library/cc848862%28v=vs.85%29.aspx#OpenSearch_Description_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B
ここの「OpenSearch Description ファイルを作成する」を見るとどうやらopensearchというものを使えば実現できそうです
書いたことないのでとりあえずマイクロソフトが配布しているものを見ることにしました

見るために右上の検索の下三角形(▼)->追加のプロバイダーの検索
とすればここが開けると思います
http://www.iegallery.com/ja-JP/addons?callback=true&featuretype=2
今回はgoogleの奴を参考にするとしましょう
http://www.iegallery.com/ja-JP/Addons/Details/10012
このページでデカデカなInternet Explorerに追加を押せば追加できるみたいなので
どのように処理をしているか見てみると

javascript:BrowserDetectionAddonInstallSearch('/ja-JP/AddOns/DownloadAddOn?resourceId=10012','False', '10012', '00000000-0000-0000-0000-000000000000');

どうやらjavascriptを使ってるみたいですね
javascriptは詳しくないのですがルートからのパスっぽいのを引数に使っているのでそのサイトを開いてみます
http://www.iegallery.com/ja-JP/AddOns/DownloadAddOn?resourceId=10012
xml形式のファイルみたいですし
どうやらこれがopensearchのファイルみたいですね
引用します

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:ie="http://schemas.microsoft.com/Search/2008/">
    <ShortName>Google</ShortName>
    <Url type="text/html" template="http://www.google.co.jp/search?hl=ja&amp;q={searchTerms}&amp;lr=lang_ja"/>
    <Url type="application/x-suggestions+json" template="http://suggestqueries.google.com/complete/search?output=firefox&amp;client=IE8&amp;hl={Language}&amp;qu={searchTerms}"/>
</OpenSearchDescription>

推測で解説しますと
1行目はxmlのバージョンとファイルの文字コード
2行目はわからないです
3行目は検索サイトを識別するための名前
4行目は検索時にアクセスするURL
5行目は候補を表示させる奴
6行目は2行目の閉じる奴
それでurlの中にある変数っぽいのは
{searchTerms}の箇所が入力した文字に置換される
みたいですね
他に
{Language}もあるみたいですがen-USなどが入るのでしょうか。なにから取得するのかわからないです
それとURLの&はエスケープ文字になっているので&amp;にしておかなければいけないみたいですね

さて、ここまでわかればもう簡単ですが念のため仕様にも目を通しておきましょう
あっているかわからないので…

英語の最新
http://www.opensearch.org/Specifications/OpenSearch/1.1
日本語訳 (4版)
https://sites.google.com/site/tsukamoto/doc/opensearch/spec-1-1-draft4

すでに翻訳している方がいましたのでそれを使わせてもらいましょう

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:ie="http://schemas.microsoft.com/Search/2008/">

これはルート要素と呼ばれるものらしいですね
xmlには詳しくないのでわかりませんがhtmlの的なものだと思います
例ではxmlns:ieの部分は書いてないので恐らく省いても問題ないでしょう
ですがこの要素は必ず一回だけ書かないといけないみたいです

    <ShortName>Google</ShortName>

人間向けのサーチエンジンを識別するためのものらしいです
16文字以下でプレーンテキストでただの文字ならなんでもいいみたいです
それとこれも必ず一回だけ書かないといけないみたいです

<Description>Use Example.com to search the Web.</Description>

書いてなかったので引用しましたがこれも必ず一回だけ書かないといけないみたいです
でもこのGoogleopensearchには書いてないしinternetexplorer的には大丈夫なのかな
人間向けのサーチエンジンの説明を書くみたいです
1024文字以下でプレーンテキストでただの文字ならなんでもいいみたいです

    <Url type="text/html" template="http://www.google.co.jp/search?hl=ja&amp;q={searchTerms}&amp;lr=lang_ja"/>
    <Url type="application/x-suggestions+json" template="http://suggestqueries.google.com/complete/search?output=firefox&amp;client=IE8&amp;hl={Language}&amp;qu={searchTerms}"/>

ブラウザが使う検索結果やサジェストなどのURLを書くみたいですね
typeにはMIMEタイプを必ず書いて
templateにはURLを必ず書くらしいですね
そして他の値は任意らしいので説明は飛ばします
それとこのUrl要素は必ず一回以上書かないといけないみたいです

これぐらいでいいと思いますがアイコンがないと寂しいので
書いてなかったですが引用します

 <Image height="16" width="16" type="image/x-icon">http://example.com/favicon.ico</Image>

 <Image height="64" width="64" type="image/png">http://example.com/websearch.png</Image>

要は画像を指定するみたいです
余談ですが確かfirefoxではbase64エンコードしたものをこれと同等なものに指定してたような気がします

ここまでくれば私はもう書けるので実際に書いてみます

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
    <ShortName>Google</ShortName>
    <Image width="16" height="16" type="image/png">data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA</Image>
    <Url type="text/html" template="https://encrypted.google.com/search?num=100&amp;ie=utf-8&amp;oe=utf-8&amp;hl=ja&amp;safe=off&amp;filter=0&amp;pws=0&amp;complete=0&amp;gbv=1&amp;q={searchTerms}"/>
    <Url type="application/x-suggestions+json" template="http://google.com/complete/search?output=firefox&amp;hl=ja&amp;qu={searchTerms}"/>
</OpenSearchDescription>

とりあえずgoogle検索用のを書けたので後はinternet explorerに読み込ませるだけです
最初に見たサイトの「検索プロバイダーの利用を促進する」にそれらしいのがあるのでそれを使うことにします
http://msdn.microsoft.com/ja-jp/library/cc848862%28v=vs.85%29.aspx#%E6%A4%9C%E7%B4%A2%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80%E3%83%BC%E3%81%AE%E5%88%A9%E7%94%A8%E3%82%92%E4%BF%83%E9%80%B2%E3%81%99%E3%82%8B
ただこれはローカル内にファイルがある場合はうまく動作しないようで*4
githubなどに一旦、xmlをあげてインターネット上からアクセスできるようにする必要があるみたいです
そしてgistにあげたとしたら

<html>
    <head>
    </head>
    <body>
        <a href="#"
            onclick="window.external.AddSearchProvider('https://raw.github.com/gist/3160033/347b6614dc68abab637ae0e02a6da4d855bf2095/google.xml')"
            >Add Search Provider Example</a>
    </body>
</html>

このようなhtmlを用意して
urlの箇所はそれぞれのインターネットにアップロードしたxmlへのリンクに置き換えてください
後はこのhtml内にあるリンクをクリックすれば追加するウィンドウが出るので承認するだけです

*1:これは私がいつもgoogle検索に使っているものです

*2:メモ帳でCtrl+hを使うと10秒もかからないです

*3:場合によってはいらないかもしれませんがその方法は私は知りません

*4:単に技術不足のような気がしますが