Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не изменяется DOM после назначения класса css в Chrome (https://javascript.ru/forum/misc/8369-ne-izmenyaetsya-dom-posle-naznacheniya-klassa-css-v-chrome.html)

khusamov 22.03.2010 01:14

Не изменяется DOM после назначения класса css в Chrome
 
Если изменить класс элемента и в новом классе допустим высота элемента отличается от текущией высоты, то новая высота будет лишь по завершении js-скрипта.

В результате, все вычисления, которые должны учитывать новую высоту элемента, конечно же завершаются с ошибкой.

Это происходит только в хроме.

Причем ошибка в том, что хром не успев загрузить CSS-файл уже запускает скрипт. И естественно нужный класс просто еще не доступен.

Как быть???

Остальные броузеры сначала загружают CSS, а потом запускают скрипт.

Octane 22.03.2010 01:16

Цитата:

Сообщение от khusamov
Причем ошибка в том, что хром не успев загрузить CSS-файл уже запускает скрипт.

Цитата:

Сообщение от khusamov
Остальные броузеры сначала загружают CSS, а потом запускают скрипт.

Это не ошибка. Другие браузеры тоже этого не гарантируют.

khusamov 22.03.2010 01:17

хе, тут же сам нашел как это исправить)))
Оказывается в гугл хроме нужно CSS загрузку <link... ставить ВПЕРЕДИ загрузки скрипта, в котором классы из этого CSS используются.

У всех прочих броузеров без разницы в какой последовательности, а в хроме вот как. И даже не придерешься, логично же!

subzey 22.03.2010 20:12

khusamov,
я Вам больше скажу, даже если Вы укажете подключение css раньше скрипта, если он загрузится раньше замера ширины, Вам повезло.

Простой тест:
index.htm
…
<link rel="stylesheet" type="text/css" href="sleeper.php" />
<script type="text/javascript">alert(document.body.clientWidth)</script>
…

sleeper.php
<?php 
header("Content-Type: text/css");
sleep(5);
?>
body {
	width: 200px;
}


IE8: 200px (ждет окончания загрузки)
Fx3.6: 200px (ждет окончания загрузки)
Op10.50: 1264px (ждет загрузки 3 секунды, потом в любом случае запускает скрипт)
Cr4: 1264px (не ждет вообще)

khusamov 22.03.2010 20:39

Но в таком случае возникает вопрос, как быть, если один файл от другого зависит?

subzey 22.03.2010 20:45

khusamov,
а никак. Или ждать onload, или не полагаться на разметку.


Часовой пояс GMT +3, время: 13:06.