Ho risolto questo problema se sei ancora interessato. La soluzione è abbastanza complessa. Fondamentalmente, è necessario collegare un semplice HTC all'elemento e memorizzare nella cache il suo clientWidth/Height.
La semplice HTC assomiglia a questo:
<component lightweight="true">
<script>
window.clientWidth2[uniqueID]=clientWidth;
window.clientHeight2[uniqueID]=clientHeight;
</script>
</component>
è necessario collegare il HTC usando i CSS:
.my-table td {behavior: url(simple.htc);}
ricordare che solo è necessario collegare il comportamento per IE8!
È quindi utilizzare un po 'di JavaScript per creare getter per i valori memorizzati nella cache:
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";
}
Si noti che ho creato il costanti larghezza/altezza. Dovresti usarli per ottenere la larghezza/altezza dei tuoi elementi:
var width = element[WIDTH];
È complicato ma funziona. Ho avuto lo stesso problema di te, l'accesso al clientWidth è stato incredibilmente lento. Questo risolve il problema molto bene. Non è ancora veloce come IE7, ma è tornato ad essere nuovamente utilizzabile.
fonte
2009-08-23 20:25:36
Sì, il passaggio alla modalità di compatibilità consente di ottenere prestazioni migliori, tuttavia interrompe altre parti dell'interfaccia utente perché non viene visualizzato esattamente come IE7. Speravo in una soluzione che non prevedesse l'uso della compatibilità, ma potrebbe essere l'unica opzione possibile. – Element
Non sto dicendo che è il problema nel tuo caso, ma l'ultima volta che ho avuto discrepanze di rendering tra IE7 e IE8 ho scoperto che il mio codice in particolare html/css aveva bug. La modalità di compatibilità sembrava risolvere il problema, ma non volevo accettarlo neanche io. Quindi probabilmente inizierei a gestire i codici attraverso i validatori. Chissà, potresti perdere qualcosa. - L'ho fatto. ;) –