Chrome で IME 変換を制御する

Chrome で IME 変換を制御する


Chrome にて、IME によるかな漢字変換を強制的に制御したい。


⬇ JavaScript で強制的に制御する。


ブラウザや IME ごとの挙動の違いもあり、かなり沼っぽい。
/takker/javascriptからIMEをcancelする

SelectionRange を使うことで、Chrome と Mozc 環境ではうまく制御できた。

ts
Copied!
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);
});
}, []);
Powered by Helpfeel