Google の検索語入力領域を大きくする Greasemonkey Script
Googleの検索語を入れるところ、もうちょっと大きければいいな、と思って作ってみた。Greasemonkey スクリプトの練習も兼ねて。
var elems, elem; elems = document.evaluate( "//input[@type='text' and @name='q']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < elems.snapshotLength; i++) { elem = elems.snapshotItem(i); elem.size=100; }
やっていることは、Google から送られてくる HTML 中の type=text
で、かつ、name=q
な input
タグを全部取り出して、その size 属性に 100 を書き込む、というもの。type=text
と、明示的にソースに書いてないと反応しないっぽい。Google の Top Page だと、type=text
と明示的に書いてないので、入力エリアは大きくならない。一度検索した後の、結果表示がされているほうの HTML には、ちゃんと type=text
が入っているので、そっちは大きくなる。
ソース中の "//input[@type='text' and @name='q']"
の部分は、XPath というものであるらしい。これをたとえば、"//a[@class='keyword']"
と書くと、HTML 中の class=keyword
と指定されている a
タグを全部、っていう意味になる。これをうまく使えば、はてなダイアリーのキーワードリンクを全部、リンクしてない単語に変えてしまうこともできるっぽい。で、書いてみた。
var elems; elems = document.evaluate( "//a[@class='keyword']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); var elem, newText; for (var i = 0; i < elems.snapshotLength; i++) { elem = elems.snapshotItem(i); newText = document.createTextNode(elem.firstChild.nodeValue); elem.parentNode.replaceChild(newText, elem); }
これは一応動くけど、<a class="keyword" href="[]http://d.hatena.ne.jp/keyword/Java[]">J<b>av</b>a</a>
というように、a
タグの中身が複数の Node になるような場合だと、うまくいかない。どうすればいいんだろ。
(って、はてなダイアリーに書くべきことではないかもしれないけど、Web の文章を読むときに、今読んでいるところをマウスカーソルでなぞってしまう私みたいな人間にとって、はてなダイアリーのキーワードリンクってウザ過ぎ。キーワードが onMouseOver
か何かにパカパカ反応して気が散るったらありゃしない。ちょっと文章をコピろうとした途端に、別ページに飛んじゃったりもするし。文中で使われいるキーワードの説明ページへのリンクを読者に提供することは素晴らしいとは思うけどね。)
Greasemonkey のスクリプトをインストールする時って、スクリプトそのものをバシッと見せつけられる。逆にいうと、スクリプトを表示しないとインストールボタンがでてこない。これってセキュリティ的に素晴らしいかも。
参考にしたところ。
- XML Path Language (XPath) バージョン 1.0
- http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm
- Dive Into Greasemonkey
- http://diveintogreasemonkey.org/
keywords: Greasemonkey | Firefox | XML | XPath | HTML | タグ | キーワード | はてなダイアリー