Div y textarea se comportan igual excepto en Firefox: ¿qué hacer?

Quiero crear un área de texto que resalte el texto más allá de un límite de caracteres (como el de Twitter).

Mi intento está aquí:http://jsfiddle.net/X7d8H/1/

HTML
<div class="wrapper">
    <div class="highlighter" id="overflowText"></div>
    <textarea id="textarea1" maxlength="200"></textarea>
</div>
<div id="counter">Letters remaining: 140</div>
<input type="Button" value="Done" id="doneButton"></input>
CSS
* {
    font-family: sans-serif;
    font-size: 10pt;
    font-weight: normal;
}
.wrapper {
    position: relative;
    width: 400px;
    height: 100px;
}
.wrapper > * {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    padding: 0;
    margin: 0;
    border: 0;
    overflow: hidden;
    resize: none;
    white-space: pre-wrap;          /* CSS3 */   
    white-space: -moz-pre-wrap;     /* Firefox */    
    white-space: -pre-wrap;         /* Opera below 7 */   
    white-space: -o-pre-wrap;       /* Opera 7 */    
    word-wrap: break-word;          /* IE */
}
.highlighter {
    background-color: #eee;
    color: #f0f;
}
.highlight {
    background-color: #fd8;
    color: #f0f;
}
textarea {
    background-color: transparent;
    color:#000;
}
JAVASCRIPT
function limitTextSize(e) {
    var max = 140
    var txt = $("#textarea1").val();
    var left = txt.substring(0, max);
    var right = txt.substring(max);
    var html = left + '<span class="highlight">' + right + "</span>";
    $("#overflowText").html(html);
    $("#counter").html("Letters remaining: " + (max - txt.length));
    $("#doneButton").attr("disabled", txt.length > max);
}

function maxLength(el) {    
    if (!('maxLength' in el)) {
        var max = el.attributes.maxLength.value;
        el.onkeypress = function () {
            if (this.value.length >= max) return false;
        };
    }
}
$(document).ready(function() {
    $("#textarea1").bind('input propertychange', limitTextSize)
    maxLength($("#textarea1"));
});

Usa jQuery

Funciona excepto en firefox. Para ver el error, pegue esto en el área de texto:

fjdf hkj hfj hdfkjsd hfllll sdfl sdlflldsf lsdlf flsdlf lsdf lsdf llsdfls dlfs ldflsd f

Lo que expone la pequeña diferencia en el formato entre div y textarea (solo en Firefox). He hecho que el texto 'oculto' sea púrpura para que puedas ver la diferencia de ajuste de palabra.

He mirado aquí:¿Cómo forzar a Firefox a representar el relleno de área de texto de la misma forma que en un div?

Y aquí:Envolver el texto de la misma manera en un div como en un área de texto

Y aquí:Firefox textarea tamaño de error?

Pero ninguno de esos parece aplicarse ...

Pensé en intentar convertirlo en un div contenteditable pero obtener los eventos de cambio parece un campo minado.

¿Alguien aquí ha hecho esto con éxito?

Respuestas a la pregunta(3)

Su respuesta a la pregunta