Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2010, 00:14
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

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

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

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

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

Как быть???

Остальные броузеры сначала загружают CSS, а потом запускают скрипт.
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2010, 00:16
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Сообщение от khusamov
Причем ошибка в том, что хром не успев загрузить CSS-файл уже запускает скрипт.
Сообщение от khusamov
Остальные броузеры сначала загружают CSS, а потом запускают скрипт.
Это не ошибка. Другие браузеры тоже этого не гарантируют.
Ответить с цитированием
  #3 (permalink)  
Старый 22.03.2010, 00:17
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

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

У всех прочих броузеров без разницы в какой последовательности, а в хроме вот как. И даже не придерешься, логично же!
Ответить с цитированием
  #4 (permalink)  
Старый 22.03.2010, 19:12
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

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 (не ждет вообще)

Последний раз редактировалось subzey, 22.03.2010 в 19:16.
Ответить с цитированием
  #5 (permalink)  
Старый 22.03.2010, 19:39
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Но в таком случае возникает вопрос, как быть, если один файл от другого зависит?
Ответить с цитированием
  #6 (permalink)  
Старый 22.03.2010, 19:45
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск