フォーカスはオレのもの

webアプリケーションのログインページで見かけることの多い

<body onLoad="document.myForm.userID.focus()">

とかいう、おせっかいなスクリプトは何とかならないものか。

何が問題かというと、低速回線でwebを見ているときに、ページのloadが完了する前に、こちらがユーザIDを入力し終わって、パスワードを入力しているタイミングでloadが終わると、フォーカスがID用のテキストボックスに戻ってしまい、パスワードを誤ってユーザIDの覧に入れてしまい、そのまま惰性でEnterを押すと、ログインに失敗してしまう。

素早くtabキーを押してフォーカスを取り戻すことができないのは、単に自分の反射神経が鈍いのが問題かもしれないが、ユーザID欄にパスワードを入れてしまうと、アスタリスクではなく平文で表示されてしまって、パスワードを覗き見られるの危険性も高まるし、あまりいいことではない。


ユーザID入力欄が見つけにくいかもしれないという配慮なのかもしれないが、それはサイトのデザインで対応すべきであって、スクリプトで当座しのぎをすべきところではない。


greasemonkeyでページのスクリプトを書き換えてやることができるかと思って、scriptタグの中身を空にするために、下のようなuser scriptを書いてみたが、うまくいかなかった。僕がとりわけ困っているサイトでは、Javascriptそのものを無効にするわけにはいかないし、いかがしたものか。*1

//うまくいかない
var scripts = document.getElementsByTagName("script");
var len = scripts.length;

for (i=0 ; i < len ; i++){
	script = scripts[i];
	if(script){
		script.innerHTML = "";
	}
}

*1:妥協案として、パスワードの入力はパスワードマネージャに頼ることにして、手動での入力はやめてしまうという方法がある。