本文へスキップ
Unveilydocs

アクセシビリティ

アクセシビリティ機能と TalkBack / VoiceOver のサポート

概要

アクセシビリティ Bridge を使うと、TTS(テキスト読み上げ)・STT(音声認識)・ハプティクスフィードバック・アクセシビリティパネルをウェブページから JavaScript で制御できます。 Android(TalkBack)と iOS(VoiceOver)の両方で同じ Bridge API をサポートしています。

注入されるグローバルオブジェクトは window.unveilyBridge(小文字)のみで、アクセシビリティ関連の機能は ttsstthapticaccessibilityPanel の名前空間で提供されます。

機能名前空間AndroidiOS
TTSunveilyBridge.tts
STTunveilyBridge.stt
HapticunveilyBridge.haptic
アクセシビリティパネルunveilyBridge.accessibilityPanel

ブリッジの準備タイミング

window.unveilyBridge はページ読み込み前に登録されますが、名前空間はグルースクリプトの注入後に生成されます。React・Vue などの SPA のマウント時(useEffect/onMounted)にアクセシビリティ API を呼び出す場合は、まず unveilyGlueReady イベントを待ってください。ボタンクリックなどのユーザー操作から呼び出す場合は不要です。

window.addEventListener('unveilyGlueReady', () => {
  window.unveilyBridge.tts.speak("Hello, world", "en-US");
}, { once: true });

モジュールの有効化

assets/config.json でアクセシビリティモジュールを有効にする必要があります。

assets/config.json
{
  "modules": {
    "accessibility": {
      "enabled": true,
      "topDownPanel": true
    }
  }
}

TTS(テキスト読み上げ)

unveilyBridge.tts のメソッドは 位置引数(positional) を使用します。オプションオブジェクトは渡しません。

speak

テキストを音声で読み上げます。第 1 引数は読み上げるテキスト、第 2 引数は言語コードです。

window.unveilyBridge.tts.speak("Hello, world", "en-US");

stop

現在再生中の TTS を停止します。

window.unveilyBridge.tts.stop();

pause / resume

TTS を一時停止または再開します。

window.unveilyBridge.tts.pause();
window.unveilyBridge.tts.resume();

setSpeed

TTS の再生速度を設定します。1.0 が標準速度で、0.14.0 の範囲に自動的に制限されます。

window.unveilyBridge.tts.setSpeed(1.0);   // 1.0 = normal, clamped to 0.1–4.0

再生状態イベント

TTS の再生状態の変化は、グローバル関数 window.onTTSStateChanged に渡されます。

window.onTTSStateChanged = function (result) {
  // result.state: 'started' | 'completed' | 'paused' | 'error'
  console.log(result.state);
};

対応言語

TTS は ko-KRja-JPzh-CN を認識し、それ以外の値は英語(en-US)として処理されます。

コード言語
"ko-KR"韓国語
"ja-JP"日本語
"zh-CN"中国語(簡体字)
"en-US"英語(デフォルト)

TTS 再生完了直後に getUserMedia({ audio: true }) を呼び出しても正常に動作します。SDK が TTS の再生前後でオーディオフォーカスを自動管理するため、遅延なしにマイクをすぐ使用できます。


STT(音声認識)

unveilyBridge.stt は位置引数として言語コードのみを受け取ります。結果とエラーはグローバル関数window.onSTTResultwindow.onSTTError)で渡され、コールバックのパラメータでは渡されません。

start

音声認識を開始します。

window.unveilyBridge.stt.start("en-US");

window.onSTTResult = function (result) {
  // result.isFinal === false means a partial (real-time) result
  console.log(result.text, result.isFinal);
};

window.onSTTError = function (error) {
  console.error(error.code, error.message);
};

渡されるオブジェクトの構造

// window.onSTTResult(result) — isFinal: false means a partial result
{ "text": "recognized text", "isFinal": true }

// window.onSTTError(error)
{ "code": "PERMISSION_DENIED", "message": "..." }

stop

音声認識を停止します。

window.unveilyBridge.stt.stop();

必要な権限 — マイク

STT にはマイクの権限が必要です。

プラットフォーム権限
AndroidRECORD_AUDIO — マニフェストでコメントを解除して有効化
iOSInfo.plistNSMicrophoneUsageDescriptionNSSpeechRecognitionUsageDescription を宣言

iOS では、最初の STT 呼び出し時にシステムのマイク権限ポップアップが自動的に表示されます。


Haptic(ハプティクスフィードバック)

unveilyBridge.hapticsettings.haptic が有効になっている必要があります。

vibrate

指定した時間(ms)だけ振動させます。ミリ秒の値を位置引数として渡します。

window.unveilyBridge.haptic.vibrate(200);

pattern

パターン振動を実行します。[待機, 振動, 待機, 振動, ...] の配列を JSON 文字列として渡します。

// JSON string: [wait, vibrate, wait, vibrate, ...]
window.unveilyBridge.haptic.pattern("[0, 100, 50, 200]");

impact

あらかじめ定義された強さのインパクト振動を実行します。 iOS では UIImpactFeedbackGenerator、Android では VibrationEffect を使用します。

window.unveilyBridge.haptic.impact("medium");   // "light" | "medium" | "heavy"

アクセシビリティパネル

ユーザーが自分でアクセシビリティのオプションを調整できるパネル UI で、unveilyBridge.accessibilityPanel 名前空間で制御します(別名 unveilyBridge.accessibility も使用可能)。config.jsonmodules.accessibility.enabled で有効化されます。 パネルが開くと、Android は TYPE_WINDOW_STATE_CHANGED、iOS は UIAccessibility.screenChanged を自動的に送信するため、TalkBack/VoiceOver がすぐに認識します。

Unveily アプリで開いたアクセシビリティパネル(Android)— 高コントラスト、フォントサイズ、読み上げ、かんたん表示、振動、タブ固定、左利きモード、片手モードのコントロール
Android
Unveily アプリで開いたアクセシビリティパネル(iOS)— 高コントラスト、フォントサイズ、読み上げ、かんたん表示、振動、タブ固定、左利きモード、片手モードのコントロール
iOS

open / close / toggle

window.unveilyBridge.accessibilityPanel.open();
window.unveilyBridge.accessibilityPanel.close();
window.unveilyBridge.accessibilityPanel.toggle();

getSettings

現在のアクセシビリティ設定を読み込みます。コールバック関数名を文字列で渡します。省略した場合のデフォルトは onAccessibilitySettingsLoaded です。

window.unveilyBridge.accessibilityPanel.getSettings("onAccessibilitySettingsLoaded");

window.onAccessibilitySettingsLoaded = function (settings) {
  console.log(settings.fontSize);      // "normal" | "large" | "extraLarge"
  console.log(settings.highContrast);  // boolean
};

applySettings

設定をプログラムから適用します。getSettings と同じフィールドを持つ JSON 文字列を渡します。

window.unveilyBridge.accessibilityPanel.applySettings(JSON.stringify({
  highContrast: true,
  fontSize: "large",
  tts: true,
  easyRead: false,
  haptic: true,
  tabAlwaysShow: false,
  leftHanded: false,
  oneHanded: false
}));

設定オブジェクト

パネルでユーザーが調整できる項目で、getSettingsapplySettings が共有するフィールドです。

設定キータイプ説明
highContrastbooleanハイコントラストモード
fontSize"normal" | "large" | "extraLarge"文字サイズ
ttsbooleanTTS の有効・無効
easyReadbooleanかんたん表示(シンプルなレイアウトに切り替え)
hapticbooleanハプティクスフィードバックの有効・無効
tabAlwaysShowbooleanタブバーを常に表示(自動非表示を無効化)
leftHandedboolean左利きモード
oneHandedboolean片手モード

config.jsonmodules.accessibility.topDownPanel: true に設定すると、画面上部から下に現れるパネル形式で表示されます。

On this page