Firefox または Opera の場合、少し回避策があります。これは要素の最初の位置にキャレットを設定します:
console.log("moz or opera doesn't support caret by position so we have a workaround");
var range = doc.createRange();
var element = doc.elementFromPoint(startX, startY);
range.setStart(element, 0);