Я решил эту проблему, если вас все еще интересует. Решение довольно сложно. В принципе, вам нужно прикрепить простой элемент к элементу и кешировать его clientWidth/Height.
Простой HTC выглядит следующим образом:
<component lightweight="true">
<script>
window.clientWidth2[uniqueID]=clientWidth;
window.clientHeight2[uniqueID]=clientHeight;
</script>
</component>
Вы должны прикрепить HTC с помощью CSS:
.my-table td {behavior: url(simple.htc);}
Помните, что вам нужно только прикрепить поведение для IE8!
Вы затем использовать некоторые JavaScript для создания методов получения кэшированных значений:
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";
}
Обратите внимание, что я создал постоянные ширины/высоты. Вы должны использовать их для получения ширины/высоты ваших элементов:
var width = element[WIDTH];
Это сложно, но это работает. У меня была такая же проблема, как и вы, доступ к clientWidth был невероятно медленным. Это очень хорошо решает проблему. Это все еще не так быстро IE7, но он снова используется для использования.
Да, переход в режим совместимости делает его намного лучше, однако он разбивает другие части моего пользовательского интерфейса, потому что он не отображается точно так же, как IE7. Был надеется на решение, которое не связано с использованием совместимости, но может быть единственным вариантом. – Element
Я не говорю, что это проблема в вашем случае, но в прошлый раз у меня возникли расхождения между IE7 и IE8, я обнаружил, что у моего кода, особенно html/css, были ошибки. Режим совместимости, похоже, решил проблему, но я тоже этого не хотел. Поэтому я, вероятно, начал бы запускать коды с помощью валидаторов. Кто знает, вы могли что-то пропустить. - Я сделал. ;) –