Chrome で IME 変換を制御する
from: タイポを勝手に修正するテキストフィールド
Chrome にて、IME によるかな漢字変換を強制的に制御したい。
⬇ JavaScript で強制的に制御する。
ブラウザや IME ごとの挙動の違いもあり、かなり沼っぽい。
/takker/javascriptからIMEをcancelする
ts
const handleCompositionUpdate:CompositionEventHandler = useCallback((event) => {
const data = event.data;
const unnaturalAlphabetRegExp = /[ぁ-んー][a-zA-Z]+[ぁ-んー]/;
if (!unnaturalAlphabetRegExp.test(data)){
return ;
}
const convertedText = toHanAscii(toHebon(data)).toLowerCase();
const selection = window.getSelection();
const currentRange = selection?.getRangeAt(0);
if (!currentRange || !(currentRange.startContainer instanceof Text) || !selection) {
throw new Error();
}
currentRange.startContainer.replaceData(currentRange.startOffset, currentRange.endOffset - currentRange.startOffset, convertedText);
selection.removeAllRanges();
// IME 変換を終了させてから、キャレットを設置する。
setTimeout(() => {
const nextRange = document.createRange();
nextRange.setStart(currentRange.startContainer, currentRange.startOffset + convertedText.length);
selection.addRange(nextRange);
});
}, []);