私は実際に簡単な問題に苦しんでいます: Internet Explorer で、現在のキャレット位置にプレーン テキストを挿入したいと考えています。これは、単純な TEXTAREA 要素では非常にうまく機能しますが、私が持っている編集可能な IFRAME では完全には機能しません。
私が使用するスクリプトでは、テキストを HTML としてカーソル位置に貼り付けるために使用する IFRAME のドキュメントから TextRange オブジェクトを作成しています。
<iframe id="editable">
<html>
<body>
Some really boring text.
</body>
</html>
</iframe>
<script type="text/javascript">
window.onload = function() {
var iframe = document.getElementById('editable');
var doc = iframe.contentDocument || iframe.contentWindow.document;
doc.body.innerHTML = iframe.textContent || iframe.innerHTML;
// Make IFRAME editable
if (doc.body.contentEditable) {
doc.body.contentEditable = true;
}
}
function insert(text) {
var iframe = document.getElementById('editable');
var doc = iframe.contentDocument || iframe.contentWindow.document;
iframe.focus();
if(typeof doc.selection != 'undefined') {
var range = doc.selection.createRange();
range.pasteHTML(text);
}
}
</script>
<input type="button" value="Insert" onClick="insert('foo');"/>
IFRAME でテキストを選択すると、選択が「foo」に置き換えられます。これは予期された動作です。しかし、キャレットをテキストのどこかに置くと、挿入が機能しません。
単純な TEXTAREA 要素でうまく機能するため、カーソルをどこかに置くだけの場合に「実際の選択」がないため、これは一般的な動作ですか、それとも IE の編集可能な IFRAME のバグですか?
回避策はありますか?