Skip to content

Instantly share code, notes, and snippets.

@hotchpotch
Created January 21, 2009 10:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hotchpotch/49917 to your computer and use it in GitHub Desktop.
Save hotchpotch/49917 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name with hatebu search
// @namespace http://b.hatena.ne.jp/
// @description google 検索の画面で、はてブ検索へのナビゲーションを出します
// @include http://www.google.co.jp/search*
// @include http://www.google.com/search*
// ==/UserScript==
location.href = "javascript:"+encodeURIComponent(uneval(function () {
(function (Global) {
var td = $X('//table/tbody/tr/td[@class="nobr xsm"]');
if (td.length) {
var text = document.getElementsByName('q')[0].value;
var tr = td[0].parentNode;
var container = document.createElement('td');
tr.appendChild(container);
var img = document.createElement('img');
img.src = 'http://b.hatena.ne.jp/images/search-mini.png';
img.alt = 'はてな検索で "' + text + '" を検索';
img.title = img.alt;
container.appendChild(img);
img.style.cursor = 'pointer';
img.addEventListener('mousedown', function() {
location.href = 'http://b.hatena.ne.jp/search?q=' + encodeURIComponent(text);
}, false);
}
function $X (exp, context, type /* want type */) {
if (typeof context == "function") {
type = context;
context = null;
}
if (!context) context = document;
exp = (context.ownerDocument || context).createExpression(exp, function (prefix) {
var o = document.createNSResolver(context)(prefix);
if (o) return o;
return (document.contentType == "application/xhtml+xml") ? "http://www.w3.org/1999/xhtml" : "";
});
switch (type) {
case String: return exp.evaluate(context, XPathResult.STRING_TYPE, null).stringValue;
case Number: return exp.evaluate(context, XPathResult.NUMBER_TYPE, null).numberValue;
case Boolean: return exp.evaluate(context, XPathResult.BOOLEAN_TYPE, null).booleanValue;
case Array:
var result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var ret = [], i = 0, len = result.snapshotLength; i < len; i++) {
ret.push(result.snapshotItem(i));
}
return ret;
case undefined:
var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
switch (result.resultType) {
case XPathResult.STRING_TYPE : return result.stringValue;
case XPathResult.NUMBER_TYPE : return result.numberValue;
case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
// not ensure the order.
var ret = [], i = null;
while ((i = result.iterateNext())) ret.push(i);
return ret;
}
return null;
default: throw(TypeError("$X: specified type is not valid type."));
}
}
})(this);
}))+"()";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment