こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

javascriptでIMEの予測変換制御

jsp,html,java,javascriptを使ってwebアプリケーションを作成しているのですが

Win10から、テキスト入力中に予測入力候補が自動で表示されるようになりました。
textareaや「contenteditable="true"」を設定したエレメントに文字入力する際に、
プログラム側から制御してIMEの予測入力を非表示にさせることは可能でしょうか?
※非表示とは、IMEの詳細設定の「予測入力」タブにある「予測入力を使用する」の
チェックを外した状態のことを言います。

よろしくお願いします。

投稿日時 - 2019-04-19 13:23:43

QNo.9608347

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

基本的にJavascriptはあくまでもブラウザ内部でのみ完結するwebページの表示(レンダリング)を制御する事しか出来ないしさせるべきではないという方針で開発改良され続けています。従ってIMEの様なより上位のOSが制御する機能には影響を与える事が出来ません。つまり無理。同じ理由でJavascriptを使ってPC内のHDDに保存されているファイルへのアクセスも基本的には出来ない(読込みのみ可能だが書き込みや削除等は拒否される)。

一応、JSを使って「現在のIMEの状態」を取得する事は可能ですが。それより先に踏み込んでIMEの状態を切り替えたり、ましてやIME自体の細かい設定情報等を変更する事はさすがに不可能です。仮にそんな事が可能になったら悪意あるwebサイトに罠を仕掛け放題になってしまいます(バックグラウンドでJSを走らせてIMEの予測変換語句を取得してサーバ側へ送信とか→訪問者のパスワードや住所氏名などを盗める)。

また似た様な感じでIMEを制御させる方法として、単純に任意の <input class="my-input"> に対して input.my-input{ime-mode:disabled;} の様にCSSを指定する事でIMEモード(日本語入力)を停止させ強制的に半角英数字しか入力出来ない様にする手法がありますが…しかしながらこの {ime-mode:~;} は現在主流のモダンブラウザでは無視されるか一部のスマホ搭載版でのみ限定的に機能するだけで、現状のほとんどのブラウザではまともに機能しないので、下手にweb製作者側がIME制御を期待してCSSを実装してもUser側には何ら影響を与えていない場合がほとんどという状況になり大きく齟齬を生み出す結果になるだけなので非推奨です。

実際、HTMLの国際規格を取りまとめるW3Cでも使うべきでは無いとしています。

- W3C: ime-mode https://momdo.github.io/css-ui/#input-method-editor

従って何が何でもIME制御を行いたいのであれば、C等を使ってネイティブアプリとして開発するか、或いはjavaを使うしか方法は無いと思いますが…どちらも自分は門外漢というか、もう何十年も触って無いので現在の仕様とか全く分からないのでアドバイシのしようがありません(PC88とかにはIMEとか無かったので(笑)。

多分、javaならそういったセキュリティを度外視したアブナイ機能や関数が実装されてそうですが…最近はもう流行ってないせいかweb検索で情報収集するのも一苦労です。

- JDK12 https://docs.oracle.com/en/java/javase/12/docs/api/java.desktop/java/awt/im/InputContext.html#isCompositionEnabled()

上記、公式解説などを見ると一応、IMEの状態を取得する関数などはあるみたいなので、もう少し掘り下げればその先を弄る関数などもありそうな気はしますが…そういった細かい設定値まで弄るのは余り聞いた事が無いので。仮にどうやっても実装するとなると、もうゼロから完全に入力文字盤みたいなモノをjavaとかで自作する方が早い様な気もします(そうして置けば余計な個人情報を取得せずに済むのでセキュアに実装可能)。

投稿日時 - 2019-04-20 13:50:45

あなたにオススメの質問