del.icio.us の "edit in place" な編集機能には、日本語入力の「確定」で IME にわたした enter を編集終了の enter と勘違いするという、いかにも ASCII 圏らしいバグがある。
わりと困るので delicious-ime.user.js というのを書いてみた。
del.icio.us の JavaScript は難読化されていないので普通に読める。ファイルは http://del.icio.us/ui/static/lib.js, http://del.icio.us/ui/static/delicious.js のふたつ。lib.js にある create という関数が DOM の要素生成に使われていて、要素の属性は niceExtend という関数で設定している。個人的には関数名に nice とか good とかつけるのは良くないと思う。
JavaScript でキーイベントをうけとるには onkeypress, onkeydown, onkeyup と3つあって、それぞれ
- onkeypress: IME の enter に反応しない
- onkeyup: 反応する
- onkeydown: Firefox は反応して Safari だとしない
という違いがある。ここでは niceExtend に細工をしかけて、onkeydown には enter をすべて無視させつつ、onkeypress にきた enter は onkeydown に投げるようにした。
関係ないけど http://del.icio.us/ui/static/delicious.js の先頭には
document.onclick = function(e){
e = e||window.event
var t = e.target||e.srcElement
if (t.onclick) return;
var r = true
if(t.className){
t.className.splitrim(' ').each(function(c){
if(onclicks[c]) {
onclicks[c].call(t, e)
r = false
}})}
return r
}
なんて記述があって LDR の元ネタっぽいと思う。あと
obj.func(x);
と
var f = obj.func;
f.call(obj, x);
が等価であることをいまさら知った。JavaScript のこういうところが好き。
January 5th, 2007 at 06:42 PM
具体的にはどうすればいいんでしょう? パソコン初心者のわたしにはその先がよく分からないです。。 よろしければ教えてください。
January 7th, 2007 at 02:43 PM
お使いのブラウザはなんでしょうか?もし Firefox なら、以下のページがわかりやすいと思います。
はてなグリースモンキー - グリースモンキーの使い方