2008/08/09

Wikitravel用検索Bookmarklet (Internet Explorer)

2007年の秋にウィキトラベルの検索で不具合が起きた際、ウィキトラベルの各言語版shared画像収納庫)を横断的に一括検索できると便利だなと思って作ってみたブックマークレットです。Internet Explorerで動きます(Windows XP Service Pack 3で確認)。Firefox・Safari用は別途作成しています。

上手く説明できないのですが、使い方は次の通りです。
Wikitravelのページで何も選択せずにそのままブックマークレットをクリックした場合
→ IE6ではプロンプトを表示し、そこに入力されたキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。IE7では何も行いません。
Wikitravelのページ上の文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのウェブ検索(ドメイン指定無し)を行います。
Wikitravelの検索結果ページでブックマークレットをクリックした場合
→ レフトナビの検索box内のキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
Wikitravelの検索結果ページ上の文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのウェブ検索(ドメイン指定無し)を行います。
他のサイト (*) で何も選択せずにそのままブックマークレットをクリックした場合
→ IE6ではプロンプトを表示し、そこに入力されたキーワードでGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。IE7では何も行いません。
他のサイト (*) で文字列を選択した状態でブックマークレットをクリックした場合
→ 選択した文字列でGoogleのドメイン指定検索(site:wikitravel.orgを指定した検索)を行います。
* ··· ウィキペディアなどのMediaWikiを使用しているサイト(検索boxがId="searchInput"となっているサイト)では、Wikitravelのページ上での使用と同じ動作(site:wikitravel.orgの指定の有無)になります。

ブックマークレットの入手方法

"WT to Google"のリンクを右クリックして「お気に入りに追加」を選択して保存して下さい。

IE6用 — WT to Google


IE7用 — WT to Google


IE7用ではポップアップブロックを回避するため、prompt()によるプロンプトを表示しないことにしました。(IE7でprompt()によるプロンプトを動かすための設定もあるようなので、この設定であれば上のIE6用ブックマークレットがIE7で動くかも知れません。でも、安全性を高めるためのポップアップブロックだと思うので、この設定は使わない方が良さそうな気がします。)

コード

後で見たくなるような気がするのでここに置いておくことにしました。読み易くするために改行とインデントを入れてあります。

IE6用

javascript:

G='http://google.com/search?q=';
W='+site:wikitravel.org';
T=document.selection.createRange().text;

if(document.getElementById('searchInput'))
 V=document.getElementById('searchInput').getAttribute('value');

if(T!=''){

 if(typeof V == 'undefined'){
  location.href=G+encodeURIComponent(T)+W;
 }
 else{
  location.href=G+encodeURIComponent(T);
 }

}
else{

 if((typeof V == 'undefined')||(V=='')){
  void(V=prompt('Keywords',''));
 };

 if(V){
  location.href=G+encodeURIComponent(V)+W;
 }

}


IE7用

javascript:

G='http://google.com/search?q=';
W='+site:wikitravel.org';
T=document.selection.createRange().text;

if(document.getElementById('searchInput'))
 V=document.getElementById('searchInput').getAttribute('value');

if(T!=''){

 if(typeof V == 'undefined'){
  location.href=G+encodeURIComponent(T)+W;
 }
 else{
  location.href=G+encodeURIComponent(T);
 }

}
else{

 if((typeof V == 'undefined')||(V=='')){
  void(0);
 }
 else{
  location.href=G+encodeURIComponent(V)+W;
 }

}
Atom