フォーカスしてるか入力可能な状態にあるかの判断はどうすればいいんだろう

空間ナビゲーションで次に移動する要素を強調してくれる UserJS を書いてる。

もうちょっとで完成なんだけど、肝心なところがちょっとバグっぽい。

とりあえずテストページを作った。

Shift を押すと行き先を強調してくれて、その状態で矢印キーを押すと移動する。

Opera の機能としての空間ナビゲーションのショートカットは無視されるようになっているので、自分のを割り当ててあっても気にしなくていい。


何が問題かというと、textarea なり input なりの要素に「フォーカス」がある場合、「入力可能な状態」「エンターを押せば入力可能になる状態 (青枠で囲まれている状態) 」の2種類がある。

document.activeElement とか event.target.tagName なんかでは両者を区別することができない。

これらを区別する良い方法を知ってる人は教えてください。


未完成ながら UserJS は↓にあるのでどうぞ。

今のところは使える範囲を file:// な URL に限定してある。


かなり完成度を上げたので github のほうとテストページのほうを更新しておいた。上に書いた問題さえ解決できればページ内で使っても問題なさそう。


id:mallowlabs さんにコメントしていただいたやり方で上の問題は回避できた。

github とテストページをまた更新。

テキストエリアに「入力可能な状態」と「エンターを押せば入力可能になる状態 (青枠で囲まれている状態) 」で shift を押してみれば違いがわかるはず。

今回から、最初の処理を0.2秒遅らせることにした。押し間違いなんかで強調が現れるのもイヤだし。

ウィンドウの見えている範囲外にある要素に空間ナビゲーションするときにちょっと問題があるみたい。このあたりもテストページで試せる。