アクセシビリティ用 API を埋め込む
コメント/質問は aaronleventhal@moonset.net へ連絡お願いします。
Mozilla はアクセシビリティの方向へ向かって進む必要があります。Mozilla のようなユーザーエージェント用の W3C によるアクセシビリティ定義がここにあります。
ひとつには、アクセシビリティがあるとは Linux や UNIX デスクトップ用に Microsoft Active Accessibility や ATK などのプラットフォーム用に埋め込まれたアクセシビリティの API をサポートすることを言います。
ユーザーが前景色や背景色、フォントサイズを変更できる設定など他にも多くの API が存在します。 Mozilla はこれらのオプションのいくつかをすでにサポートしています。この文書はアクセシビリティをサポートする API を埋め込む際に、すでに実現している事、これから必要になる事を提示します。
Window ごとのテキストズーム
メソッド nsIDOMWindow::GetTextZoom(float *zoomFactor) と nsIDOMWindow::SetTextZoom(float zoomFactor) は、コンテンツウィンドウ上に幅広いテキストズーム要素を設定するために使用できます。ズーム要素 1.0 は 100% すなわち、通常ズームを表します。二倍のサイズにするには nsIDOMWindow::SetTextZoom(2.0); を使って下さい。
アクセシビリティを設定する
アクセシビリティに関連する設定はたくさんあります。大部分はこれらの設定のひとつが変更されると自動リフレームが実行されます。リフレームとは、ネットワークから文書を再ロードすることなく、ページの表示を新しい設定に合わせることです。なお、デバックビルドにおいては、これによって非常に多くのアサーションが発生します。 (bug 71598)
埋め込み時に設定を使用するには、以下のようなコードを使用して下さい:
#include "nsIPref.h"; nsresult rv; nsCOMPtr設定をマニュアルで追加するには、prefs.js へ以下のような一行を追加して下さい:prefs(do_GetService(NS_PREF_CONTRACTID, &rv)); prefs->SetBoolPref("bool.pref.name", PR_TRUE /* or PR_FALSE */); prefs->SetIntPref("int.pref.name", newValue); prefs->SetCharPref("string.pref.name", newCharStarValue);
user_pref("accessibility.browsewithcaret", true);
アクセシビリティ設定項目参照リスト
以下のリストは、アクセシビリティのための設定項目(未実装のものもあり)の説明です :
| 機能 | 実装 | 適用バージョン |
|---|---|---|
| 画像 |
SetIntPref("network.image.imageBehavior", behavior);
/* behavior: 0=全ての画像を読み込む、1=同じ Web サイトにある画像のみ読み込む、 2= 画像なし */
|
Moz 0.8 |
| クッキー |
SetIntPref("network.cookie.cookieBehavior", behavior);
/* behavior: 0=全ての Cookie を保存する、1=元の Web サイトからの Cookie のみ保存する、 2= クッキーなし */
SetBoolPref("network.cookie.warnAboutCookies", boolWarn);
|
Moz 0.8 |
| フォント |
SetCharPref("font.name.monospace.x-western", newFontName);
SetCharPref("font.name.serif.x-western", newFontName);
SetCharPref("font.name.sans-serif.x-western", newFontName);
/*
他の i18n charsets では、x-western を以下に変更すること: x-central-euro、
x-cyrillic、 x-unicode、 x-user-def、 x-baltic、 el、 tr、 he、 ar、 th、 ja、
zh-CN、zh-TW へ*/
SetIntPref("font.size.fixed.x-western", newFontSize);
SetIntPref("font.size.variable.x-western", newFontSize);
/* 他の i18n charsets は、フォントフェース用に上記で説明した名前を変更すること*/
SetCharPref("font.default","serif"); /* or "sans-serif" */
SetIntPref("browser.use_document_fonts", whichFonts);
/* whichFonts: 0=ドキュメントで指定されたフォントを使用する、 1=常に自分の設定を使用する */
|
Moz 0.8 |
| OS からのフォント? |
SetBoolPref("browser.use_system_fonts", useSystemFonts);
|
未実装 |
| ページ用の色 |
SetCharPref("browser.display.foreground_color", "#abcdef" /* hex color value */);
SetCharPref("browser.display.background_color", "#abcdef" /* hex color value */);
SetBoolPref("browser.display.use_system_colors", boolSystemColors);
SetBoolPref("browser.display.use_document_colors", boolUseAuthorColors);
/* Setting use_document_colors を設定すると、背景画像のロードも行われなくなる。*/
|
Moz 0.8 |
| リンク表示 |
SetCharPref("browser.anchor_color", "#abcdef" /* hex color value */);
SetCharPref("browser.visited_color", "#abcdef" /* hex color value */);
SetBoolPref("browser.underline_anchors", boolUnderlineLinks);
|
Moz 0.8 |
| フォーカス表示 |
SetBoolPref("browser.display.use_focus_colors", useFocusColors);
SetCharPref("browser.display.focus_background_color", colorString);
SetCharPref("browser.display.focus_text_color", colorString);
SetCharPref("browser.display.focus_ring_width", numPixels); /* 0-4 */
|
Moz 0.9.2 |
| テキスト選択表示 |
SetCharPref("browser.selection.background_color", colorString);
SetCharPref("browser.selection.foreground_color", colorString);
SetCharPref("browser.selection.border", cssBorderStyleString);
/* selection border は実装が困難だろうか? W3C UAAG の要件である。*/
SetBoolPref("browser.selection.use_system_colors", useSystemColors);
|
未実装 |
| コンテンツを待つ時の警告 |
SetCharPref("alert.audio.mail_waiting", pathToSoundFile);
SetCharPref("alert.audio.background_image_waiting", pathToSoundFile);
SetCharPref("alert.audio.popup_waiting", pathToSoundFile);
SetCharPref("alert.audio.applet_waiting", pathToSoundFile);
SetCharPref("alert.audio.script_waiting", pathToSoundFile);
SetCharPref("alert.audio.redirect_waiting", pathToSoundFile);
SetCharPref("alert.audio.refresh_waiting", pathToSoundFile);
SetCharPref("alert.audio.plugin_content_waiting", pathToSoundFile);
SetCharPref("alert.audio.video_waiting", pathToSoundFile);
SetCharPref("alert.audio.audio_waiting", pathToSoundFile);
SetCharPref("alert.audio.timed_event_waiting", pathToSoundFile);
/* これらの警告はまた、ステータスバーかどこかに画像で表示されるだろう。 */
|
未実装 |
| 背景画像 |
SetBoolPref("browser.accept.background_images", acceptBackgroundImages);
|
未実装 |
| ブリンクするテキスト |
SetBoolPref("browser.blink_allowed", acceptBlinkText);
|
未実装 |
| アニメーション |
SetCharPref("image.animation_mode", animationMode);
animationMode: "normal", "none", "once"
|
Moz 0.8 |
| アプレット |
SetBoolPref("browser.accept.applets", acceptApplets);
|
未実装 |
| スクリプト |
SetBoolPref("browser.accept.scripts", acceptScripts);
|
未実装 |
| ポップアップするウィンドウ |
// window.open を特定のサイトでオフにする:
user_pref("capability.policy.popupsites.sites",
"http://www.annoyingsite1.com http://www.popupsite2.com");
user_pref("capability.policy.popupsites.windowinternal.open","noAccess");
// あるいは全てのサイトでオフにする:
user_pref("capability.policy.default.windowinternal.open","noAccess");
// target=anything で新しいウィンドウをポップアップすることをオーバーライドする。
user_pref("browser.block.target_new_window", true);
// 新しいページロード開始時にポップアップウィンドウをオーバーライドする(ほとんどのポップアップ広告を阻止する)。
user_pref("dom.disable_open_during_load", true);
|
Moz 0.8 |
| クライアント側リダイレクト |
SetBoolPref("browser.accept.redirects", acceptRedirects);
|
未実装 |
| コンテンツのリフレッシュ |
SetBoolPref("browser.accept.refreshes", acceptRefreshes);
|
未実装 |
| プラグインコンテンツ |
SetBoolPref("browser.accept.plugin_content.[plugin_name_goes_here]", acceptPluginContent);
|
未実装 |
| ビデオ |
SetBoolPref("browser.accept.video", acceptVideo);
|
未実装 |
| オーディオ |
SetBoolPref("browser.accept.audio", acceptAudio);
|
未実装 |
| 時間設定イベント |
SetBoolPref("browser.accept.timed_events", acceptTimedEvents);
|
未実装 |
| タイマー速度 |
SetIntPref("timer.relative_speed", percent);
/* 100 が通常速度に対応、200 は 2 倍速 */
|
未実装 |
| リストやリンクにおける循環 |
SetBoolPref("keyboardnav.allow_cycling", allowCycling);
|
未実装 |
| キーボードフォーカスによって動くマウスポインター |
SetBoolPref("keyboardnav.mouse_follows_keyboard_focus", mouseFollows);
/* この機能が設定されると、キーボードの現在フォーカスのあるフレームの 0、0 ピクセルへマウスポインターが必ず移動する。*/
|
未実装 |
| キャレットによるブラウジング |
SetBoolPref("accessibility.browsewithcaret", useCaret);
/* この機能が設定されるとキャレットがブラウザのテキストに現れ、ユーザーは読み取り専用のエディターの中でのように HTML のコンテンツをカーソルで順に移動出来る。*/
|
Moz 0.9 |
特別なコンテンツの通知
W3C UAAG はオプションになるべきコンテンツの種類を決めています。これは、ユーザが選択可能なコンテンツの存在を知らされた後に、ある時点でそれをロードできるようにすることを意図しています。これは、各ページ、各コンテンツの形式ごとに、ユーザに長いチェックボックスのリストを見せるよりも、はるかによい方法です。
各 "browser.accept.*" という設定には、対応する "alert.audio.*" という設定があります。これは、各コンテンツの形式に対応する音声ファイルの設定を行うものです。音声ファイルは「ビデオの準備ができました」と言う人間の声のクリップでも単なるビープ音のクリップでも可能です。ユーザーインターフェイスを通してどのようにこれを伝えるかは別の問題になります。
インスタンスごとに特別なコンテンツを受け入れる
-
特別なコンテンツの存在を知らされたユーザが、ロードされていないものの中からロードしたいものを選択できるようにしなければなりません。
そのセッションのそのページ限定で、コンテンツの種類に応じてロードする事ができるメソッドを持つ nsIWebBrowserAccessible インターフェースを作り上げる事が、実現方法の一つです。
未解決の問題: URL ごとのアクセシビリティの設定
私たちは、URL に基づいて特定の設定を行うためのインターフェイスを設計するでしょう 。それをユーザーに提示する明瞭な手段が見出せるならば、大変役立ちます。例えば、URL ごとの設定によって、ユーザーはおなじみの害のないウェブページから得たスクリプトは受け入れ、そうでないウェブページからは受け入れないようにすることができます。アプレット、背景画像、スタイルシートなどと同類の機能をユーザーは欲しがるかもしれません。
URL に基づくクッキーや画像用の許可システムは既にあります。それを拡張してアクセシビリティの設定を保持する事がおそらく可能でしょう。これは UI の問題で、アクセシビリティ・インターフェイスの埋め込みへどう取り組むか決める前に解決しなければなりません。