To prevent a keypress from inserting a character into the editor content, add a listener for the keypress
event to the iframe's document and call the event's preventDefault()
method (or set the returnValue
to false
in IE < 9):
var iframe = document.getElementById("your_iframe_id");
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
if (iframeDoc.addEventListener) {
iframeDoc.addEventListener("keypress", function(e) {
e.preventDefault();
}, false);
} else if (iframeDoc.attachEvent) {
iframeDoc.attachEvent("onkeypress", function(e) {
e.returnValue = false;
});
}
To get the position of the caret in terms of the character offset within the whole editable content, you can use the function below, adapted from this answer.
function getCaretCharacterOffset(iframe) {
var win = iframe.contentWindow, doc = win.document;
var caretOffset = 0;
if (typeof win.getSelection != "undefined") {
var range = win.getSelection().getRangeAt(0);
var preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length;
} else if (typeof doc.selection != "undefined" && doc.selection.type != "Control") {
var textRange = doc.selection.createRange();
var preCaretTextRange = doc.body.createTextRange();
preCaretTextRange.moveToElementText(element);
preCaretTextRange.setEndPoint("EndToEnd", textRange);
caretOffset = preCaretTextRange.text.length;
}
return caretOffset;
}
alert( getCaretCharacterOffset(iframe) );