フォーカスとjavascript:void(0)の話・2

Googleがonclickにはhref="javascript:void(0)"も付ける理由?に頂いたコメントを元に再び考察してみました。

Tabでのフォーカス云々は独自にショートカットキーを実装してるので大して意味が無い話だと思います。

個人的な好みとしては、アプリケーションごとのショートカットキーを覚えるのは面倒なうえ、後述の問題があるため、あまり好きではありません(GMでカスタマイズは別として)。

というのも、Operaのような比較的高性能なショートカットキーを持つブラウザの場合、アプリケーションごとのショートカットキーが操作の邪魔となることが多いからです。例えば(サポート外なのは理解していますが)LDRですと、Shift+↑↓がフックされるため、「フォーカスの移動」が制限されてとてもストレスが溜まります。

だからといって「勝手に独自キーを定義するな」と一概に言うことは出来きないのも理解しています(便利な状況も大いに存在するので)。ですので、ライトユーザでも簡単にサイト独自のショートカットキーを無効にする手段を提供するなどの配慮が必要なのではないかと思っています。

Webアプリケーションのショートカットキー設定が難しいのはaccesskey属性の時代から明らかでしたが、今後さらに独自の定義が普及すると、思わぬ動作に驚くことが増えることになりそうです。

これは避けるべき悪習だとすでに多くの開発者が認識してるはずです。

おっしゃるとおりです。実際、私自身もa要素を使うことはまず無いのが現状です。そのため逆に、今回GoogleLocalのマーカーを見て、わざわざjavascirpt:void(0)をGoogleが使うと言うことは、それなりに意味があるのだろう、という思考に至りました。ただ、飽くまでも仮説に過ぎない意見を、さも定説かのように書いてしまったのは表現が悪すぎました。お詫びして訂正いたします。

リンクのコピーとか、ホイールクリックで新規タブで開くとか、ユーザーが期待する動作を裏切ります。

リンクとして機能させる気がないのであれば、a要素を使うべきではないと思います。

この部分に関しては若干疑問があります。

というのも、「リンクとして機能させる気がない」というのは飽くまでも開発者側の認識であり、ユーザ側からすれば、onclick付きspan要素であろうと、javascript:void(0)付きa要素であろうと、ポインタが手のマークになればそのアイテムは全て「リンク」であると認識するからです。そのため、どちらの方法を使用しても、程度の差こそあれ、結局ユーザーの期待を裏切ることになります。

これらの状況を鑑みるに、場合によっては「裏切り」をある程度妥協し、(Fxならば)Tabによるフォーカスを可能にするという方針も、もしかしたら意味があるのではないかと思っています。

私自身、何らかの理由でマウスを使わずに操作することが良くあるため、マウスに頼らないフォーカスの移動は比較的重要な要素だと感じています。FxにはOperaのShift+矢印のような仕組みがないため、とくにその傾向が強いと思います。

また、キーボードによる操作が不可能な状況は、音声ブラウザでのブラウジングにも厳しい状況となることが良くあります。これまたOperaが例になってしまいますが、aによるフォーカスの移動とvによる読み上げの組み合わせがspanonclickの組み合わせでは使用できません(OperaはShift+矢印onclickにもフォーカスできるので問題ないと言えば問題ないですが)。他の音声ブラウザでの検証は行っていない上、余りこの方面は詳しくないので確かなことは言えませんが、同様の状況は他のブラウザでも起こるのではないかと推測しています。

javascript:void(0)が悪習とされているといことは、もちろんそれなりに意味があってのことだとは思いますが、状況によっては使用することで利益を得ることが可能だと私は判断します。ただし、バッドノウハウである感も否めないため(ブラウザの機能不足が問題?)、使用するべきかどうかの判断には、十分な配慮が必要だと思われます。