Firefox Flash動画でIMEユーザー辞書が使えないときの解決方法

ニコニコ動画のコメント欄で、IMEのユーザー辞書が使えない。

OSをXPからWindows8にアップグレードしてから、この現象が起きました。

ブラウザはFierfox。IMEは、Microsoft IME。

ユーザー辞書に単語登録したものが変換リストに表示されません。システム辞書は使えます。同じwebページ内でも、動画部分以外では入力には支障はありせん。他のソフトにも影響はありません。

ニコニコ動画と同じように動画にコメントする機能があるサイトは他にもあるので、1サイトだけチェックしてみましたが、そこでもユーザー辞書が使えませんでした。

サンドボックス(仮想環境)でIMEの機能が制限されるのと似ています。

ユーザー辞書が使えなくなる条件

  • Windows Vista以降
  • Firefox
  • Adobe Flash Player

この3つが揃った時。

IMEの種類によってはこの現象は起きないかもしませんが、未確認です。

原因はAdobe Flash Player

Adobe Flash Playerはデフォルトで「保護モード」が有効になっています。

保護モードはFirefoxでのみ機能し、他のブラウザには関係ありません。

Adobe ReaderのバージョンX以降にも保護モード機能があります。

保護モード有効時は、Flash Playerプラグインはサンドボックス内でFlashコンテンツ(SWF)を再生します。これにより、Flash Playerを利用しての攻撃を受ける危険性を軽減するとのことです。

セキュリティを向上させるものですが、これのせいでIMEのユーザー辞書にアクセスできなくなっています。

SWF形式以外なら問題ないのかと思いましたが、ニコニコ動画のどの動画でもユーザー辞書が使えません。

ニコニコ動画にアップされている動画は、swf形式とswf以外の形式が混在しています。
しかし、動画プレーヤー(ニコニコプレーヤー)自体がswfで作られているとか。

解消方法は3つ

  1. ユーザー辞書をシステム辞書として作り直して登録する。

    保護モードは有効のままでよい。

    デメリット: 新たに単語登録をしたら、システム辞書に作成し直す必要がある。

  2. 保護モードを無効にする。

    保護モードを有効にしていると他の不具合が出る場合にも効果がある。(Flash動画の再生ができない、パフォーマンスが下がる等)

    デメリット: 有効時よりセキュリティは低下する。Firefox以外のブラウザを使用したときと同じで、サンドボックス化しない。

  3. IMEのユーザー辞書へのアクセスを許可する。

    保護モードは有効のまま。

    デメリット: Flash Playerプラグインにメモリマップドファイルのユーザー辞書へのフルアクセス権を与えることになる。

これらの設定は、Flash Playerのプロセス再起動後に反映されます。
(タスクマネージャーから、いったんFlash Playerプラグインを終了させればok)

方法1 ユーザー辞書をシステム辞書として作り直して登録する。

  1. ユーザー辞書ツールを起動する。

    ツール→システム辞書の作成 でシステム辞書として保存する。

    保存場所(デフォルト) C:\Users\%username%\AppData\Roaming\Microsoft\IME\(数字)\IMEJP\UserDict

  2. IMEのプロパティを起動する。

    詳細設定→辞書/学習タブ→システム辞書 追加をクリック

    作成したシステム辞書を指定。

  3. システム辞書一覧に表示されたら、チェックを入れて適用をクリック。

方法2 保護モードを無効にする。

mms.cfgファイルを編集します。

  1. メモ帳(notepad.exe)を管理者権限で起動する。
    (管理者権限で起動していないと、上書き保存ができないため)

    あるいは、コマンドプロンプト(cmd.exe)を管理者権限で起動し、
    start notepad "(mms.cfgファイルのフルパス)"
    を実行 →管理者権限のあるメモ帳でファイルが開かる。
  2. メニューのファイル→開く (Ctrl+O)

    (32bit Windowsの場合)
    C:\Windows\System32\Macromed\Flash\mms.cfg

    (64bit Windowsの場合)
    C:\Windows\SysWow64\Macromed\Flash\mms.cfg

  3. 次の1行を追加する。

    ProtectedMode=0

  4. メニューのファイル→上書き保存 (Ctrl+S)

[参照]

Adobe Flash Player Administration Guide for Flash Player (英語)
http://www.adobe.com/devnet/flashplayer/articles/flash_player_admin_guide.html

日本語訳 (少し古いバージョン)
http://www.adobe.com/jp/devnet/flashplayer/articles/flash_player_admin_guide.html

方法3 IMEユーザー辞書へのアクセスを許可する。

mms.cfgファイルを編集、ProtectedModeWhitelistConfig.txtファイルを作成します。

メモ帳(notepad.exe)を管理者権限で起動。

あるいは、コマンドプロンプト(cmd.exe)を管理者権限で起動し、
start notepad "(ファイルのフルパス)"
を実行することで、管理者権限のあるメモ帳でファイルが開かれます。

mms.cfgファイルの編集

  1. メニューのファイル→開く (Ctrl+O)

    (32bit Windowsの場合)
    C:\Windows\System32\Macromed\Flash\mms.cfg

    (64bit Windowsの場合)
    C:\Windows\SysWow64\Macromed\Flash\mms.cfg

  2. 次の2行を追加する。

    ProtectedMode=1
    ProtectedModeBrokerWhitelistConfigFile=1

  3. メニューのファイル→上書き保存 (Ctrl+S)

ProtectedModeWhitelistConfig.txtファイルの作成

  1. メモ帳を管理者権限で起動したまま、
    メニューのファイル→新規(Ctrl+N)
  2. SECTION_ALLOW_ANY=*imejp*
    と入力する。(Microsoft IMEの場合)
  3. メニューのファイル→名前を付けて保存
  4. ファイル名の所に次のファイル名を入れて保存する。
    (C:\から.txtまでを1行で)

    (32bit Windowsの場合)
    C:\Windows\System32\Macromed\Flash\ProtectedModeWhitelistConfig.txt

    (64bit Windowsの場合)
    C:\Windows\SysWow64\Macromed\Flash\ProtectedModeWhitelistConfig.txt

なぜ SECTION_ALLOW_ANY=*imejp* なのか。

方法3のホワイトリストのポリシー設定についての説明です。

ホワイトリストでは、SECTION_ALLOW_ANY以外にも次のものが使えます。

  • FILES_ALLOW_ANY
  • FILES_ALLOW_DIR_ANY
  • FILES_ALLOW_READONLY
  • REG_ALLOW_ANY
  • PROCESS_ALL_EXEC
  • NAMEDPIPES_ALLOW_ANY
  • EVENTS_ALLOW_ANY
  • MUTANT_ALLOW_ANY

[参照]

Adobe Protected Mode, Creating policies(英語)
http://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/protectedmode.html#creating-policies

ユーザー辞書ファイルの場所は
C:\Users\%username%\AppData\Roaming\Microsoft\IME\(数字)\IMEJP\UserDict\imjp(数字)cu.dic

しかし、FILES_ALLOW_ANYを使って上記のパスへのアクセス許可を設定しても、ユーザー辞書が使えるようにはなりません。

アクセス許可が必要なのは次のところです。

(Windows8、IME2012 Ver 15.0の場合)

\Sessions\1\BaseNamedObjects\Local\c:_users_(コンピュータ名)_appdata_local_microsoft_ime_15.0_imejp_cache_imjp15cache.dat_M_S-1-…(以下省略)

\Sessions\1\BaseNamedObjects\Local\c:_users_(コンピュータ名)_appdata_roaming_microsoft_ime_15.0_imejp_userdict_imjp15cu.dic_M_S-1-…(以下省略)

ホワイトリストに入れるもの

これは普段エクスプローラーから見られるファイル類とは異なります。メモリマップドファイル(メモリに読み込まれているもの)です。
タイプはSectionなので、ホワイトリストに入れるにはSECTION_ALLOW_ANYを使います。
ワイルドカード(*)を使って指定。フルパスでは上手くいきません。

ANYはフルアクセスを許可、READONLYは読み取りのみ許可。
FILES_ALLOW_READONLYがあるので、SECTION_ALLOW_READONLYは使えるだろうかと試してみましたが、ダメでした。

私のWindows8 PCでは、次の内いずれでもユーザー辞書が使えるようになりました。

  • SECTION_ALLOW_ANY = *imejp*
  • SECTION_ALLOW_ANY = *imejp_userdict_imjp15*
  • SECTION_ALLOW_ANY = *ime_15.0_imejp*
  • SECTION_ALLOW_ANY = *IMEJP_UserDict*
  • SECTION_ALLOW_ANY = *userdict_imjp15*
  • SECTION_ALLOW_ANY = *UserDict*
  • SECTION_ALLOW_ANY = *imjp15*

WindowsのIMEバージョンにかかわらず使えるので、
SECTION_ALLOW_ANY = *imejp*
が無難だと思います。

ただし、Cドライブにある元のユーザー辞書のパスが違えば、*imejp* では通用しない可能性があります。(サードパーティ製のIMEの場合など)

関連記事