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

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

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

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

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

コメント機能付きの動画サイトはニコニコ動画以外にもあります。1サイトだけ試してみたところ、そこでもユーザー辞書が使えませんでした。

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

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

  • Windows Vista以降
  • Firefox
  • Adobe Flash Player

この3つが揃った時。

IMEの種類によっては、問題なしの可能性もあります。

原因はAdobe Flash Player

Flash Playerの保護モードが原因でした。

Adobe Flash Playerは、デフォルトで「保護モード」が有効になっています。ただし、保護モードが機能するのはFirefoxだけです。他のブラウザには関係ありません。

(ちなみに、Adobe ReaderのバージョンX以降にも保護モード機能があります。保護モードは、元々Adobe Readerに搭載されていました)

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

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

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

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

解消方法は3つ

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

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

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

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

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

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

  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?id=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-…(以下省略)

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

これは普段エクスプローラーから見られるファイル類とは異なります。メモリマップドファイル(メモリに読み込まれているもの)です。

アクセスを許可したい項目のTypeは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の場合など)

関連記事