小さなテキストブロックの構文を強調表示するdesignModeを備えたiframeにリッチテキストエディタがあります。キーアップ時のハイライトを更新したいのですが、DOMをいじるとフレームがぼやけてしまい、キーを押すたびにカレットが消えて入力できなくなります。パーサーがキャレットの場所を覚えていて、iframeのフォーカスを再設定し、カレットを交換できれば、それは問題にはなりません。私はgetSelection()
とその親戚を読みましたが、少なくともChromeでは、明らかにonkeyupが選択を削除しgetSelection()
ます-onkeyup内で呼び出すと、常にnull選択が生成されます。これを回避する方法はありますか?
これは私が持っているものです:
<iframe>
<html>
<head>
<script>
function parse() {
if(window.getSelection().type != 'None') {
var range = window.getSelection().getRangeAt(0);
}
var text = document.body.textContent;
//Parse text, output is stored in newtext
document.body.innerHTML = newtext;
document.body.focus();
if(range) {
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
</script>
</head>
<body onload="document.designMode = 'on'; document.onkeyup = parse;">
Text entered appears here
</body>
</html>
</iframe>