うごメモはてなにGoogle検索を追加するGrasemonkey拡張


昨日書いたGoogle検索を追加するGreasemonkeyを投稿。
OperaFirefoxGoogleChromeで確認しました。(IE系エンジンは非対応)
うごメモはてなの検索は妙に遅くて、OR検索なども使えません。ということで、このスクリプトを入れると検索の横にGoogleアイコンが追加され、それをクリックするとGoogleでugomemo.hatena.ne.jpのサイト内検索を行います。
まだ機能を追加していく予定なので、init関数から各種関数を呼び出す形になっています。

// ==UserScript==
// @name		Ugomemo Script Plus
// @description	うごメモはてなを拡張する
// @include		http://ugomemo.hatena.ne.jp/*
// @include		http://d.hatena.ne.jp/ugomemohatena/*
// @namespace	http://d.hatena.ne.jp/harimau_tigris/
// @version		0.1.0
// ==/UserScript==

if( location.href.indexOf('my.widget.iframe') == -1  ) {
	window.addEventListener("load",init,false);
}
function init()
{
	AddGoogleSearch();
}

//ベンリ関数
$id = function(id){return document.getElementById(id)};
$class = function(class){return document.getElementsByClassName(class)};
$tag = function(tag){return document.getElementsByTagName(tag)};
$e = function(XPath){ return document.evaluate(XPath,document,null,7,null);};

//################## Google検索 ##################
function AddGoogleSearch()
{
var t = $id("global-search");
if(t == null)return false;

//aタグを作成
var a = document.createElement("a");
a.className = "search";
a.href="javascript:void()";
a.addEventListener("click", function()
{
document.location = "http://www.google.co.jp/search?q=" + encodeURI($id("global-search-input-area").value)
  + "&domains=ugomemo.hatena.ne.jp&sitesearch=ugomemo.hatena.ne.jp";
},false);


//imgタグを作成
var img = document.createElement("img");
img.style.cssText="margin-bottom:-3px"
img.src = 'data:image/gif;base64,'+
    'R0lGODlhEAAQAPcAANQuJDSmJOSalDzKRJzOnAxKpGy6bOymLLzO7DSOLDSuPFSe5OySjNzu3Ex6'+
    'vIRWLOTu9LTK5HzCbDSaPPS6LFy+PFSCzOw6NJy23PTivOz69OxmZESmPMw+JESyRJTClPTerHym'+
    '3CRy1OzGbDyaTPSuLDySNDyiPPz+/OQ6LPTCLKzWtPze3Ey2POy2TOz2/KTGpCR61BRevOy6XESy'+
    'NOz27ESaPPS+PDSK5JzKnPzmjOSyPJTSrDSKPGyu7OyWlPzy3MRWNOTy/PS+NFS+RJzC7JTCnJyy'+
    '1PTWjPQ2LDR61ESuPHSiLGzKRJTSpIS6hMza/GSm5OyWjPy6xHzGfDyePPS2NFSK1PRGRPzytPz6'+
    '9PRuZOw+LEy2ROzSdOyuNDySPPTCRMzi9PT6/BRezMxeNGS+RHyu5EyyPOwuHDyiNPyqtFTGRKTS'+
    'nBRSrJyuZOSqLLTS7EyKLEyi5PSSjOzy5Dx6zNzq/HzCdDyaPFyKxOw+NJy65PzivPT69OxqZESq'+
    'PMyejKzexFSO3MRGLPTCxBRmzCx+3CR23PTGNPz25PTetDyOPKTG7JzGnPTWdNTm9MRiNJTGlESe'+
    'PPQ6LPS6NOyyNDyWPHyy5EyyRESiPOw6LPT2/OyyPOzy/Fy+RDx61EyuPBODgwB8fCAA4OkAb5QA'+
    'F3wAAGAApQAA/5UAgHwAfP8AAP8AAP8AAP8AAF0AAAABAJUAAHwAAOoZAPQsAICDAHx8AAAwtADo'+
    'ABYTAAAAAAD0VAAr6QCDEwB8ABgAAXgAABYAAAAAAADR6AHp6AATEwAAAAAMCwCh8wBPgAAAfPda'+
    'qPQA+4AAE3wAABw02OjpmhMTgwAAfBidqHhk/xaDgAB8fABw/wC9/wBP/wAA/wCcpQDI/wBPgAAA'+
    'fAoAiAIBgQAAQgAAAAAw4ADobwATFwAAAAUAAAMBAAAAAAAAABi40QBk6QCDEwB8AAABZAAAZAAA'+
    'gwAAfAAA7gAAOQAAAAB8AEMYZDroZAATg4gAfEwuakpncVtpSLRmACH5BAAAAAAALAAAAAAQABAA'+
    'Bwj/AFGggBDljCcUhTb8+bOl4R8WKMb4wBEDk0A6abhw2cNlkxQUL+bgQDTo4JpNmzRySfEDBacF'+
    'h0TYiYMQS5IklDal+IiiCBkyoMSgkNKhTKQghAAwEOLyih0+KOq8YcJmACA5DwKFaATB0x0UDSRU'+
    'aPKpRaZMCiRZkGEhgsA2ASqYqdAlFCBNBBwUcKNHYAM8aFp0QQOIgxoCR47EgSIQRQ0qgEIt4cDB'+
    'hqQxKLLoeIQEiGMDaihPqiIJhZcbiVRQGOHZSZUTk/KYIKAFTqUhNyx9WYSCxwQbeWQ70rLDkiUr'+
    'Xzr1QfEkwYRLl8CU7jPjwAEXi8YIImHCBBgTPWAID9RCXgsKPys+OFr/AYafgAA7';

//一番下のspan作成
var back = document.createElement("span");
back.className = "commandosearch";

//その上のspan作成
var lsp = document.createElement("span");
lsp.className = "search-left";
lsp.style.cssText = "padding-left:5px";

//それぞれ乗っけていく
lsp.appendChild(img)
a.appendChild(lsp);
back.appendChild(a);
t.appendChild(back);
t.cssText = "white-space: nowrap;";//googleChromeの表示崩れ対策
}
//################## End Google検索 ##################

前に書いたスクリプトだとたった6行なのに、DOM操作にしたらかなりの行数になってしまいました・・・
画像はBase64になっているので、好きな画像に置き換えることも可能です。
次はお気に入りボタンの誤爆防止というかなり簡単なものにする予定です。

一部記述を修正しました