それで、これが問題です。contenteditable div を表示する WebView があります。これで、テキストを選択すると、すべて問題なく動作し、javascript インターフェースを介して、document.getSelection() が本来の値を返すことがわかります。ただし、何かを入力すると、現在のノードで選択したテキストを置き換えるのではなく、対応するオフセットで最初のノードのテキストを置き換えるように見えます。たとえば、私が持っている場合
Blah1
Blah2
Blah3
Blah4
「ah4」を選択して「q」と入力すると、
Blq
Blah2
Blah3
Blah4
それ以外の
Blah1
Blah2
Blah3
Blq
ソフト キーボードではなくハードウェアキーボードを使用してエミュレータで実行すると、正常に動作することに気付きました。
イベントをインターセプトして手動で処理しようとしましたが、テキストを置き換えるときにイベントもonKeyListener
JavaScriptonKeyDown
も登録もしません。onKeyPress
JavascriptonInput
は登録されますが、置換が行われた後でのみ登録されます。
これを回避する方法はありますか?
詳細情報:
結局のところ、テキストが選択され、ソフト キーボードでキーが押された場合、そのキープレスはアクティビティの dispatchKeyEvent メソッドを通過しません。この違いがグリッチ発生の根本的な原因ではないかと推測しています。なぜ、どのようにこれが起こるのか、そしてなぜそれがグリッチを引き起こすのか知っている人はいますか? コード実行の経路をたどることができるかどうか見に行きます。