moveToPointとexpand

マウスオーバー辞書を作ろうとして、マウス直下の単語を取得する為にTextRangeをマウス直下の要素まで移動させて1単語ずつ移動させつつ座標を比較して...なんてことをやっていて、なんでboundingLeftとかboundingTopが読み取り専用なんだと嘆いていたが、moveToPointってのがあるのね。つーことはわざわざめんどくさいことしなくても

var rng = document.body.createTextRange();
rng.moveToPoint(event.clientX, event.clientY);
rng.expand("word");

でrngがマウス直下の単語を指すようになる。早速ポップアップ辞書をこれで書き直してみたがなかなか良い感じに動いている。expandの性質がそうなのか、えらく甘く拾ってしまうが拾い損ねることは無いみたいだし、これくらいならマウスオーバータイプを常駐するようにしてもいいんじゃないかと思う。あとは両タイプともポップアップの表示場所、消去タイミングの調整が必要なくらいか。いままでは単語の拾い損ねと区別する意味でデータベースに無い単語はunknownを表示していたが、これもGoogleツールバーにあわせて見つからなかったら非表示にしよう。