小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


クリック1つで、はてなダイアリーから検索するGreasemonkeyスクリプトを作ってみた


Googleのページにラジオボタンを1つ追加して、クリック1つで、はてなダイアリーから検索してくれるGreasemonkeyスクリプトを作ってみた。

Greasemonkeyスクリプトのインストール
ソースコード
// ==UserScript==
// @name           GoogleHatedaSearch
// @namespace      http://d.hatena.ne.jp/replication
// @include        http://*.google.co.jp/search*
// @description    Google検索に、はてなダイアリーから検索する機能を追加します。
// @version        0.1
// ==/UserScript==

(function() {
  
  // document.getElementByIdのショートカット
  function $id(id) {
    return document.getElementById(id);
  }
  
  // トリミング関数
  function trim(str) {
    return str.replace(/^[ ]+|[ ]+$/g, '');
  }
  
  // サイト内検索の場合は、何もしない
  if(document.getElementById("site1")) return false;
  
  // テキストボックスがない場合は、何もしない
  var textBox = document.getElementsByName("q").item(0);
  if(!textBox || textBox == null) return false;
  
  // はてなダイアリーから検索のラジオボタンを作成する
  var radioElm = document.createElement("input");
  radioElm.id = "hateda";
  radioElm.type = "radio";
  radioElm.name = "lr";
  
  // ラベルタグを作成して、ラジオボタンと関連づける
  var labelElm = document.createElement("label");
  labelElm.htmlFor = "hateda"
  labelElm.innerHTML = "はてなダイアリーから検索";
  
  // ラジオボタンを画面に追加する
  var elm_label = $id("issferb");
  elm_label.appendChild(radioElm);
  elm_label.appendChild(labelElm);
  
  var url = "site:http://d.hatena.ne.jp";
  
  // ラジオボタンを取得し、onClickイベントを追加する
  $id("hateda").addEventListener("click", 
    function() {
      var searchBox = document.getElementsByName("q").item(0);
      var tmp = searchBox.value;
      if (tmp != "") {
        if (tmp.indexOf(url) == -1) {
          searchBox.value = url + " " + tmp;
        }
        // フォームをサブミット
        $id("tsf").submit();
      }
    }
  , false);
  
  // ウェブ全体から検索と日本語のページを検索がクリックされた場合は、
  // サイト内検索のキーワードを削除する
  $id("all").addEventListener("click", resetSearchBox, false);
  $id("il").addEventListener("click", resetSearchBox, false);
  
  // 検索窓をリセットする
  function resetSearchBox() {
    var searchBox = document.getElementsByName("q").item(0);
    var tmp = searchBox.value;
    if (tmp.indexOf(url) != -1) {
      tmp = trim(tmp); // 空白を除去
      searchBox.value = tmp.substring(url.length + 1, tmp.length);
    }
  }

})();