コンピュータにおいて、フォーカススティールとは、フォーカスされていないプログラム(最小化されている、またはバックグラウンドで動作しているなど)がウィンドウをフォアグラウンドに配置し、すべてのキーボード入力をそのウィンドウにリダイレクトする際に発生するモードエラーです。これは、ユーザーが入力中にプログラムがフォーカスを奪い、入力したキーが新しくフォーカスされたウィンドウに送られ、入力が失われたり、意図しない影響が生じたりする可能性があるため、一部のユーザーにとっては迷惑または危険とみなされます。反応時間によっては、キーストロークが数個で済む場合もありますが、ユーザーの注意がコンピュータ画面に向けられていない場合(キーボードを見ながら入力している場合や、横にあるテキストを読んでいる場合など)、またはプロセッサの遅延によってフォーカススティールが発生してから新しくフォーカスされたウィンドウが画面に表示されるまでに遅延(数秒に及ぶ場合もある)が生じる場合は、キーストロークが複数になることもあります。
フォーカススティールは、ユーザーが画面から注意をそらして入力作業を行っている際に、意図せずプログラムの動作に同意してしまい、システムに損害を与える可能性があるため、深刻な問題を引き起こすことがあります。例えば、Microsoft Windowsがディスククリーンアップウィザードを表示した際、ユーザーはウィザードが入力待ち状態であることに気づかずに、ファイルの削除に「同意」してしまう可能性があります。また、フォーカススティールは、セキュリティ侵害を引き起こす場合もあります。例えば、ユーザーがパスワードを入力した際に、入力したパスワードがマスクされていない入力フィールドに新しいインスタントメッセージングウィンドウに表示されてしまうといったケースです。
フォーカスを奪う代わりに、ユーザーの注意を引くための代替手段がいくつかあります。[ 1 ]
以下のウィンドウマネージャシステムは、フォーカスの奪取を許可しています。
Microsoft Windowsベースのシステムでは、現在のアプリケーションからフォーカスを奪う可能性のあるポップアップダイアログボックスが使用されます。Windows 7 より前のバージョンの Microsoft Windows では、別のプログラムを起動したり、新しいウィンドウやダイアログボックスをポップアップ表示したりする際に、協調アプリケーションがフォーカスを奪うことをデフォルトで防止するユーザー設定があります。[ 2 ]この同じ方法は、Windows 7 以降では機能しません。[ 3 ]
Apple MacOS X システムでは、バックグラウンド アプリケーションがポップアップ モーダル ダイアログを使用する場合、アプリケーションがバックグラウンドからフォアグラウンドに切り替わります。この動作の例としては、Google Chrome がアラート ダイアログを使用している場合があり、[ 4 ]に記載されています。
以下のウェブブラウザでは、 JavaScriptのthis.focus()機能を使ってフォーカスを奪うことができます。
何がフォーカスを奪っているのかを特定するためのプログラムが作成されている。