はてなブックマークのタグ補完を改善
// ==UserScript== // @name Yet Another Hatena Bookmark Tag Suggestion // @namespace http://d.hatena.ne.jp/nozom/ // @description Improve Tag Suggestion of Hatena Bookmark // @include http://b.hatena.ne.jp/add?* // @include http://b.hatena.ne.jp/edit?* // ==/UserScript== // This script higly depends on tag_suggest.js. // So, it might not work with the future release. (function() { function onKeyDownHandler(e) { if (e.keyCode == 9) { var win = window.wrappedJSObject; var doc = document.wrappedJSObject; if (! win.suggesting) return; if (win.candidates.length == 1) { var ev = doc.createEvent('KeyboardEvent'); ev.initEvent('keypress', true, true, win, false, false, false, false, 13, 13); var obj = e.target.wrappedJSObject; // obj.dispatchEvent(ev); // dirty hack, however it works var ev2 = new Object; for (prop in ev) { ev2[prop] = ev[prop]; } with (ev2) { charCode = which = 13; target = obj; preventDefault = stopPropagation = function() {}; } win.onKeyPressHandler(ev2); } } } var commentInput = document.getElementById("comment"); commentInput.addEventListener("keydown", onKeyDownHandler, false); })();
まだ全然完成ではないけど、とりあえずコンセプトコードということで公開。
やりたいことは、はてなブックマークではタグとコメントが同じ入力欄なために
- タグを打つたびに[を入力する必要がある
- タグ補完を決定するつもりでENTERキーを押したらタイプミスしていてコメント入力自体終了、という事故が起こりやすい
という問題を改善すること。
今回は、タグ補完の決定にENTERキーだけでなくTABキーも使えるようにして2番目の問題に対処した(Google Reader風)。候補が2つ以上の時TABキーは次候補へ移動に割り当てられてるので、ちょっと微妙な操作感だけどまあいいか。
技術的には、Greasemonkeyから元のページの変数へのアクセスのしかたとか、キーイベントの生成方法とか、その辺りがこれまで知らなくて勉強になった部分。
追記
Greasemonkeyから元のページの変数へアクセスするには、unsafeWindowを使うのが正しいようだ。