He resuelto este problema si todavía está interesado. La solución es bastante compleja. Básicamente, debe conectar un HTC simple al elemento y almacenar en caché su clientWidth/Height.
El simple HTC se ve así:
<component lightweight="true">
<script>
window.clientWidth2[uniqueID]=clientWidth;
window.clientHeight2[uniqueID]=clientHeight;
</script>
</component>
Es necesario adjuntar el HTC usando CSS:
.my-table td {behavior: url(simple.htc);}
Recuerde que sólo necesita conectar el comportamiento para IE8!
a continuación, utiliza algo de JavaScript para crear captadores de los valores almacenados en caché:
var WIDTH = "clientWidth",
HEIGHT = "clientHeight";
if (8 == document.documentMode) {
window.clientWidth2 = {};
Object.defineProperty(Element.prototype, "clientWidth2", {
get: function() {
return window.clientWidth2[this.uniqueID] || this.clientWidth;
}
});
window.clientHeight2 = {};
Object.defineProperty(Element.prototype, "clientHeight2", {
get: function() {
return window.clientHeight2[this.uniqueID] || this.clientHeight;
}
});
WIDTH = "clientWidth2";
HEIGHT = "clientHeight2";
}
Tenga en cuenta que he creado las constantes anchura/altura. Debe utilizar estos para obtener el ancho/altura de sus elementos:
var width = element[WIDTH];
Es complicado pero funciona. Tuve el mismo problema que tú, el acceso a clientWidth fue increíblemente lento. Esto resuelve el problema muy bien. Todavía no es tan rápido como IE7, pero ha vuelto a ser utilizable de nuevo.
Sí, cambiar al modo de compatibilidad hace que funcione mucho mejor, sin embargo, rompe otras partes de mi IU porque no se representa exactamente como IE7. Estaba esperando una solución que no implique el uso de compatibilidad, aunque puede ser la única opción. – Element
No digo que sea el problema en su caso, pero la última vez que tuve discrepancias de representación entre IE7 e IE8 encontré que mi código especialmente html/css tenía errores. El modo de compatibilidad parecía resolver el problema, pero tampoco lo acepté. Entonces probablemente comenzaría a ejecutar los códigos a través de validadores. Quién sabe, es posible que te hayas perdido algo. - Yo si. ;) –